2012-12-10 61 views
0

最可靠的數據源,我是相當新的使用被從一個C#數據表中篩選最好的數據源轉出有點棘手,我Linq的。我需要對數據表執行以下過濾。數據後面的背景是,它是一組其包含從用於故障安全的目的,不同的數據源的獨立冗餘的記錄。在情況下,一個數據源已在某些時候被損壞,二次或第三數據源將成爲該事件線程的主要來源。過濾器通過使用查詢Linq中

原始數據(例如): signintable:

source First  Last 
d1  John  Smith 
d1  John  Smith 
d3  John  Smith 
d1  Jane  Doe 
d2  Jane  Doe 
d3  Richard  Miles 
d3  Richard  Miles 
d1  Richard  Miles 

我想兩列添加到此:由(名字,姓氏和數據源)組的唯一成員的數量和uniqueRecordGroupnumber基於不同的組(名字,姓氏,數據源),但由哪個數據源對於特定名字姓氏有最記錄,至少可以訂購。

source First Last Count UniqueRecordGroup 
d1  John Smith 2  1 
d1  John Smith 2  1 
d3  John Smith 1  2 
d1  Jane Doe  1  1 
d2  Jane Doe  1  2 
d3  Richard Miles 2  1 
d3  Richard Miles 2  1 
d1  Richard Miles 1  2 

然後,我會最終在爲了消除冗餘/爲該特定記錄較不可靠的數據源僅過濾出主(唯一的記錄組1)。

source First Last Count UniqueRecordGroup 
d1  John Smith 2  1 
d1  John Smith 2  1 
d1  Jane Doe  1  1 
d3  Richard Miles 2  1 
d3  Richard Miles 2  1 

以上步驟如何在數據表上使用Linq(例如數據表登錄表)完成?

謝謝。

回答

0

現在完成此應用程序功能後,我不會建議嘗試使用Linq來達到此目的。我發現沒有太多的資源和論壇明確涉及更多的Linq查詢,而使用Oracle或SQL時,至少需要大量的論壇和帖子。因此,而不是在LINQ的腳本中的C#/ asp.net層添加該功能,我在數據庫查詢中添加一層它。

在Oracle,我完成上述由4個步驟:

--1. creating a derived table of unique instances of main data (a): (First, Last) and a count of instances in the main table: 

b As 
(select First, Last, source, COUNT(*) distinctpersoncount 
From a 
GROUP BY First, Last, source) 

--2. Rank the fills from greatest to least. 

c As 
(select b.*, row_number() over(partition by First, Last 
order by distinctpersoncount desc) as distinctpersonrowid 
from b 


--3. combine the new distinctperson columns into a joined table with the original data a. 

d As 
(select a.*, c.distinctpersoncount, c.distinctpersonrowid 
from a 
left join c 
on 
.... (join conditions here) 

--4. select all the data in d, filtering by distinctpersonrowid = 1 (the best source).