1

LINQ to Entities が絶対値関数を処理できることが期待されます。linq を sql に変換できないようです。.net 3.5 を使用しています。このクエリを表現して Linq to Entities を操作する別の方法はありますか? 使用している絶対値は、エンティティ/DB テーブルの一部です。以下のコードサンプルを参照してください。

ListItemIds = sessionDB.ListItems
.Where(x => x.ListItemId >= x.List.StartId && x.ListItemId <= x.List.EndId)
.Where(x => (x.Dr != null)||(Math.Abs(x.Dr.Value) >= rangeDB))
.Select(x => x.ListItemId).ToList();
4

1 に答える 1

3

数学的に言えば、はまたは( と同等)|x| >= yの場合に真であるため、 の正と負の値を確認するだけで済みます。x >= y-x >= yx <= -yDr.Value

しかし、スコットは正しい。null をチェックする方法も間違っています。Drプロパティnullではなく、指定された範囲内にあるレコードのみが必要な場合 (つまり、null は除外されます)、これ を使用します。Dr.Value

ListItemIds = sessionDB.ListItems
  .Where(x => x.ListItemId >= x.List.StartId && x.ListItemId <= x.List.EndId)
  .Where(x => (x.Dr != null)&&((x.Dr.Value >= rangeDB)||(x.Dr.Value <= -rangeDB)))
  .Select(x => x.ListItemId).ToList();

Dr または、がnullまたは Dr.Value指定された範囲内にある (つまり、null が含まれる)レコードの場合:

ListItemIds = sessionDB.ListItems
  .Where(x => x.ListItemId >= x.List.StartId && x.ListItemId <= x.List.EndId)
  .Where(x => (x.Dr == null)||(x.Dr.Value >= rangeDB)||(x.Dr.Value <= -rangeDB))
  .Select(x => x.ListItemId).ToList();
于 2013-09-27T00:47:03.047 に答える