在Datatable上选择特定用户的MAX值

时间:2014-05-19 15:54:49

标签: c# select datatable

我正在寻找实现以下目标的方法:

我有一个数据表:

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  

我需要选择Column" Value"的最大值。特定ID" id"

例:客户1的最大值

应该返回:1 Client 1 11

但是使用这段代码:

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

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

2 个答案:

答案 0 :(得分:0)

使用ID在Customer字段中创建一个IEnumerable,然后将MAX应用于Value字段

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 ID=@idParameter 
GROUP BY ID, Customer

答案 1 :(得分:0)

SELECT MAX(Value)FROM yourtable WHERE id = 1,如果这是你想要的dunno

更新

string maxvalue = dt.AsEnumerable()

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

        .ToString();

希望这可以帮助你