0

重複の可能性:
linqcaseステートメント

このシナリオを検討してください。

私はこのような機能を持っています:

private void MyFunction(byte Period)
{
    ...

私はこのようなデータベースにテーブルを持っています:

...    F008    F009_1    F009_2    F009_3    F009_4    F009_5    F009_6    F009_7    F009_8  ...

-------------------------------------------------------------------------------------------------

関数本体で計算をしたいです。

var MyCalculation = from r in ent.MyTable
                    group r by new { r.F000 } into grp
                    select new
                          {
                              F008 = grp.Sum(o => o.F008) 
                              F009 = ?????

問題は、F009これをlinqプロジェクションで実行する必要がある場合です。

switch(Period)
{ 
    case 1:
        F009 = (Sum of F009_1) + (Sum of F009_2);
        break;
    case 2:
        F009 = (Sum of F009_3) + (Sum of F009_4);
        break;
    case 3:
        F009 = (Sum of F009_5) + (Sum of F009_6);
        break;
    case 4:
        F009 = (Sum of F009_7) + (Sum of F009_8);
        break;
}

switch caseこれをlinqプロジェクションでどのように使用できますか?

ありがとう

4

2 に答える 2

0

インラインクエリと結合クエリの組み合わせのようにする必要があります。正確なシナリオまたは作成したクエリを教えてください。

従うことができる1つのアプローチは、クエリを作成してswitchケースを記述し、それにurクエリを含めることです。

case 1: var MyCalculation = from r in ent.MyTable
                    group r by new { r.F000 } into grp
                    select new
                          {
                              F008 = grp.Sum(o => o.F008) 
                              F009 =F009_1+F009_2,}

`このような同様の方法を行うことができます..とにかくクエリは一度実行され、最も簡単な方法です

于 2012-12-18T06:48:43.977 に答える
0
var groupQuery = ent.MyTable.GroupBy(r => r.F0000 );
IEnumerable<Result> query;

switch(Period)
{ 
    case 1:
        query = groupQuery.Select(grp => new Result { 
              F008 = grp.Sum(r => r.F008),
              F009 = grp.Sum(r => r.F009_1 + r.F009_2)
           };
        break;
    case 2:
        query = groupQuery.Select(grp => new Result { 
              F008 = grp.Sum(r => r.F008),
              F009 = grp.Sum(r => r.F009_3 + r.F009_4)
           };
        break;
    case 3:
        query = groupQuery.Select(grp => new Result { 
              F008 = grp.Sum(r => r.F008),
              F009 = grp.Sum(r => r.F009_5 + r.F009_6)
           };
        break;
    case 4:
        query = groupQuery.Select(grp => new Result { 
              F008 = grp.Sum(r => r.F008),
              F009 = grp.Sum(r => r.F009_7 + r.F009_8)
           };
        break;
}

var MyCalculation = query.ToList();

そしてあなたのDTO:

public class Result
{
    // provide actual data types
     public int F008 { get; set; }
     public int F009 { get; set; }
}
于 2012-12-18T07:04:33.310 に答える