4

条件に応じて SQL Server 2008 からデータをフィルター処理する必要がある .NET アプリケーションを開発しています。私のデータ構造は次のようになります。

ここに画像の説明を入力

結果はキーでグループ化およびソートする必要があります。デフォルトでは、キーごとにリビジョンが null の行が返されますが、revisionParameter が設定されている場合は、対応するリビジョン番号の行が返されます。パラメータが 2 の場合、出力は次のようになります。

abc     2     FALSE
def    null   TRUE
ghj     2     FALSE
klm    null   TRUE

LINQでこれを達成するにはどうすればよいですか? ありがとう

編集: lazyberezovsky への応答: あなたの LINQ 式はラムダとして書き直されました:

partial void RuleEntriesByUserSaveId_PreprocessQuery(int? UserSaveId, ref IQueryable<RuleEntry> query)
{
query = query.Where(re => re.Revision == null || re.Revision == value)
             .GroupBy(re => re.Key)
             .Select(g => g.FirstOrDefault(x => x.Revision != null) ?? g.First());
}
4

1 に答える 1

3
from r in Table
where !r.Revision.HasValue || r.Revision.Value == value
group r by r.Key into g
select g.FirstOrDefault(x => x.Revision.HasValue) ?? g.First()

これにより、リビジョンが指定された値または指定された値に等しいレコードが選択nullされます。キーでグループ化した後、値を持つリビジョンを持つレコードを見つけようとします (その値はフィルターと等しくなります)。リビジョンのあるレコードがない場合は、グループから最初のレコードを取得します。

于 2013-04-16T09:25:13.750 に答える