说我有这张桌子
MyTable的
ID 的 NumValue1 的 NumValue2 的 NumValue3 的 NumValue4 的 NumValue5
1 12.17 23.97 空 0.07 空
如何使用 LINQ 语法从此单行获取 23.97 的最大值?
在SQL(MS SQL)中,我可以写这样的东西:
SELECT MaxNum = case
when MyTable.NumValue1 is not null and
(MyTable.NumValue1 >= MyTable.NumValue2 or MyTable.NumValue2 is null) and
(MyTable.NumValue1 >= MyTable.NumValue3 or MyTable.NumValue3 is null) and
(MyTable.NumValue1 >= MyTable.NumValue4 or MyTable.NumValue4 is null) and
(MyTable.NumValue1 >= MyTable.NumValue5 or MyTable.NumValue5 is null)
then MyTable.NumValue1
when MyTable.NumValue2 is not null and
(MyTable.NumValue2 >= MyTable.NumValue1 or MyTable.NumValue1 is null) and
(MyTable.NumValue2 >= MyTable.NumValue3 or MyTable.NumValue3 is null) and
(MyTable.NumValue2 >= MyTable.NumValue4 or MyTable.NumValue4 is null) and
(MyTable.NumValue2 >= MyTable.NumValue5 or MyTable.NumValue5 is null)
then MyTable.NumValue2
when MyTable.NumValue3 is not null and
(MyTable.NumValue3 >= MyTable.NumValue1 or MyTable.NumValue1 is null) and
(MyTable.NumValue3 >= MyTable.NumValue2 or MyTable.NumValue2 is null) and
(MyTable.NumValue3 >= MyTable.NumValue4 or MyTable.NumValue4 is null) and
(MyTable.NumValue3 >= MyTable.NumValue5 or MyTable.NumValue5 is null)
then MyTable.NumValue3
when MyTable.NumValue4 is not null and
(MyTable.NumValue4 >= MyTable.NumValue1 or MyTable.NumValue1 is null) and
(MyTable.NumValue4 >= MyTable.NumValue2 or MyTable.NumValue2 is null) and
(MyTable.NumValue4 >= MyTable.NumValue3 or MyTable.NumValue3 is null) and
(MyTable.NumValue4 >= MyTable.NumValue5 or MyTable.NumValue5 is null)
then MyTable.NumValue4
when MyTable.NumValue5 is not null and
(MyTable.NumValue5 >= MyTable.NumValue1 or MyTable.NumValue1 is null) and
(MyTable.NumValue5 >= MyTable.NumValue2 or MyTable.NumValue2 is null) and
(MyTable.NumValue5 >= MyTable.NumValue3 or MyTable.NumValue3 is null) and
(MyTable.NumValue5 >= MyTable.NumValue4 or MyTable.NumValue4 is null)
then MyTable.NumValue5
else null
end
FROM MyTable WHERE MyTable.ID=1;
谢谢。
答案 0 :(得分:1)
鉴于您的DataTable
看起来像这样:
var t = new DataTable();
t.Columns.Add("ID", typeof(Int32));
t.Columns.Add("NumValue1", typeof(decimal));
t.Columns.Add("NumValue2", typeof(decimal));
t.Columns.Add("NumValue3", typeof(decimal));
t.Columns.Add("NumValue4", typeof(decimal));
t.Columns.Add("NumValue5", typeof(decimal));
你的行看起来像这样:
var row = t.Rows.Add(new object[] {1,
12.17m,
23.97m,
DBNull.Value,
0.07m,
DBNull.Value});
您可以使用此查询获取最大值:
// get all values:
var max = row.ItemArray
// only values that are not DBNull:
.Where(o => o != DBNull.Value)
// convert to decimal and get the max value:
.Max(o => Convert.ToDecimal(o));
max
现在是23.97