2013-03-28 45 views
0

我有個人數據的表格看起來像這樣同一個特定列的內容:如何獲得記錄從一個DataTable中使用LINQ

Identifier Name Phone Address 
............................. 
    1  aa 23 abc 
    2  bb 22 abd 
    2  cc 11 aaa 
    3  dd 44 amd 
    4  fa 33 agd 
    2  ds 14 dad 
    3  as 55 fgg 

我想獲得具有相同標識符的記錄,使用LINQ,要得到這樣的事情

Identifier Name Phone Address 
............................. 
    2  bb 22 abd 
    2  cc 11 aaa 
    2  ds 14 dad 
    3  dd 44 amd 
    3  as 55 fgg 

我可以通過標識訂單,並複製到一個新的DataTable,然後分析它,並具有相同標識符獲得的記錄,但是這將是昂貴的我猜。有更短的路嗎? 謝謝!

+0

我們可以有一些代碼嗎?你有什麼嘗試?當你說'數據表'是你指的'System.Data.DataTable'?或者以您提供的格式提供數據的文本文件? – IAbstract 2013-03-28 03:15:02

+0

是的,它是一個System.Data.DataTable。我沒有發佈任何代碼,因爲它很大,我有完全不同的列。我已經提取了重複數據,然後我想在數據表格之間做出區別,但我不知道。感謝你的回答。 – darkdante 2013-03-28 03:35:22

回答

2

類似於下面的代碼可以使用相同的模式篩選和提取重複項到新的DataTable。代碼假定Identifierint。根據適用情況,用適當的名稱和類型替換。

var extractedDuplicates = (from row in table.AsEnumerable() 
          group row by row.Field<int>("Identifier") into rows 
          where rows.Count() > 1 
          from row in rows 
          select row).CopyToDataTable(); 

試一試,看看你能得到多大。如果有任何機會沒有任何重複,你會希望將它分成多個語句,因爲如果沒有要複製的行,CopyToDataTable()將會拋出。

var duplicateRows = from row in table.AsEnumerable() 
        group row by row.Field<int>("Identifier") into rows 
        where rows.Count() > 1 
        from row in rows 
        select row; 

DataTable extractedDuplicates; 
if (duplicateRows.Any()) 
    extractedDuplicates = duplicateRows.CopyToDataTable(); 
else 
    extractedDuplicates = table.Clone(); 

,當然,如果你不需要一個新的DataTable,省略此代碼的第二部分完全和只是duplicateRows工作。

-1
select * from YourTable a where a.Identifier in 
(
    select aa.Identifier from YourTable aa group by aa.Identifier 
    having (count(aa.Identifier) > 1) 
) 
+0

這不是LINQ。 – IAbstract 2013-03-28 03:26:34

相關問題