2013-05-09 50 views
0

我有一个表与表中的所有列返回行,LINQ - 基于多个不同的列

**Matter No  Client No Client Name Invoice No Invoice Date Invoice Amt** 

1111-0001   1111   ABC   101  01/01/2013  100.00 
1111-0001   1111   ABC   102  02/01/2013  200.00 
1111-0001   1111   ABC   103  03/01/2013  300.00 
1111-0001   1111   ABC   104  04/01/2013  400.00 
1111-0001   1112   DEF   105  05/01/2013  500.00 
1111-0001   1113   GHI   106  06/01/2013  600.00 

基于以上情况,我想基于列返回所有列,但重复行 - 物质否和客户端号即我需要看到3行作为输出:

**Matter No  Client No Client Name Invoice No Invoice Date Invoice Amt** 

1111-0001   1111   ABC   101  01/01/2013  100.00 
1111-0001   1112   DEF   105  05/01/2013  500.00 
1111-0001   1113   GHI   106  06/01/2013  600.00 

我怎么能在LINQ中实现这一点?

在此先感谢

+0

Dó你有一些C#代码来解决你的问题吗? :-)你有什么尝试? – 2013-05-09 22:49:02

回答

4
from x in table 
group x by new {x.MatterNo, x.ClientNo} 
into mygroup 
select mygroup.First(); 

或者如果你喜欢这句法

list.DistinctBy(x => new {x.MatterNo, x.ClientNo}); 

如果你不对付列表,你可以尝试

from DataRow drow in dtable.Rows 
group drow by new {MatterNo = drow["Matter No"], ClientNo = drow["Client No"]} 
into myGroup 
select myGroup.First(); 
+0

+1 Ninja'd,比我的回答更简洁。 – 2013-05-09 22:50:33

+0

谢谢,但列名是[问题否]和[客户号]。以上查询不识别x.matterno和x.clientNo。它说System.Data.DataRow不包含x.MatterNo的定义 – 2013-05-09 22:56:07

+0

@prafullashimpi我改变了它,最后一个例子是否给你带来了更近的距离? – 2013-05-09 22:59:59

0

试试这个:

DataTable result = dt.AsEnumerable() 
        .GroupBy(x => x.Field<int>("COLUMN NAME")) 
        .Select(x => x.First()).CopyToDataTable();