2

LINQ to SQL を使用して、特定の日付範囲の収益データを取得しようとしています。現在、テーブルは次のように設定されています。

Comp    Eps    Year    Quarter
IBM     .5     2012    2
IBM     .65    2012    3
IBM     .60    2012    4
IBM     .5     2011    2
IBM     .7     2013    1
IBM     .8     2013    2

Eps を除いて、すべてのフィールドのデータ型は string または char です。Eps のデータ型は double です。これが私のコードです:

var myData = myTable
    .Where(t => t.Comp.Equals("IBM")
        &&
        Convert.Int32(string.Format("{0}{1}", t.Year, t.Quarter)) <= 20131);

試してみると、次のエラーが表示されます。

Method 'System.String Format(System.String, System.Object, System.Object)' has no supported translation to SQL 

ラムダ式を使用して、年と四半期が「20132」未満のすべての Ep を選択するにはどうすればよいですか?

4

3 に答える 3

2

Year最善の解決策は、 とQuarterが整数になるようにデータベース スキーマを変更することです。

あなたが言うように、それが不可能な場合は、.AsEnumerable()拡張メソッドを使用してメモリ内のクエリの半分を実行できます。

var myData =
    myTable.Where(t => t.Comp.Equals("IBM"))
           .AsEnumerable()
           .Where(Convert.Int32(string.Format("{0}{1}", t.Year, t.Quarter)) <= 20131);

ただし、データベースに同じ行がいくつあるかによってCompは、パフォーマンスがいくらか低下します。

于 2013-06-26T19:28:31.063 に答える
0

これを試すことができます:

var myData = myTable
    .Where(t => t.Comp.Equals("IBM")
        && (Convert.ToInt32(t.Year) < 2013 
            || (Convert.ToInt32(t.Year) == 2013 
                && Convert.ToInt32(t.Quarter) <= 2)));

またはこれ:

var myData = myTable
    .Where(t => t.Comp.Equals("IBM")
         && String.Compare(t.Year + "" + t.Quarter, "20131") <= 0 );
于 2013-06-26T19:25:22.633 に答える