2014-05-19 391 views
-1

林特定用户寻找一种方法的最大价值,实现以下目标:选择在数据表

我有一个数据表:

 
ID Custommer Value 
1  Client 1  10 
2  Client 2  20 
3  Client 3  30 
1  Client 1  11 
2  Client 2  21 
3  Client 3  31 

我需要选择一个的列“值”最大值特定ID “ID”

客户端的例子:最大值1

应该返回:1 Client 1 11

但使用此代码:

dVipArchiveClientSelectd = dVipArchive 
    .Select(id + "= 1" + " AND " + value + " = MAX(" + value + ")"); } 

它无法返回。有一种方法可以使用数据表来实现这一点,并选择?

+0

是dvipArchive一个DataTable实例? – Steve

+0

您应该在custommer上添加groupby。 – Hatsjoem

+0

是的,史蒂夫。 – ddmunhoz

回答

0

通过ID创建一个IEnumerable与组客户字段,然后应用MAX的值字段

var g = from t in dVipArchive.AsEnumerable() 
    group t by new {id = t["ID"], cust=t["Customer"]} 
    into grp 
    select new 
    { 
     grp.Key.id, 
     grp.Key.cust, 
     maxV = grp.Max(z => z["Value"]) 
    }; 

现在你把所有的与每个ID(和客户)的最大值的行
简单地套用一个WHERE到你感兴趣的行提取到

var row = g.Where (x => Convert.ToInt32(x.id) == 1).Single(); 
Console.WriteLine("ID=" + row.id.ToString()); 
Console.WriteLine("Customer=" + row.cust); 
Console.WriteLine("MaxValue=" + row.maxV); 

我不知道这是不是像

直接执行SQL命令更好
SELECT ID, Customer, Max(VALUE) 
FROM Customers 
WHERE [email protected] 
GROUP BY ID, Customer 
0

SELECT MAX(值)yourtable WHERE ID = 1,说不上来,如果是这样的东西u想

UPDATE

string maxvalue = dt.AsEnumerable() 

     .Max(row => row["Value"]) 
     .WHERE (//logic) 

     .ToString(); 

希望这可以帮助ü

+0

你不能那样做C#DataTable – ddmunhoz

+0

看看我的编辑,希望它能帮助你! – user3584562