1

このテーブルがあるとします

マイテーブル

ID     NumValue1    NumValue2    NumValue3    NumValue4    NumValue5
1 12.17 23.97                null                  0.07                null 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;


ありがとうございました。

4

1 に答える 1

2

あなた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

于 2013-04-11T07:59:21.270 に答える