4

我正在开发一个 .NET 应用程序,我需要根据条件过滤来自 SQL Server 2008 的数据。我的数据结构如下所示:

在此处输入图像描述

结果应按Key进行分组和排序。默认情况下,每个Key都应该返回Revision为null的行,但是如果设置了revisionParameter,则应该返回具有相应Revision号的行。如果参数为 2,则输出应为:

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

如何在 LINQ 中完成此操作?谢谢

编辑:对lazyberezovsky的回应:您的LINQ表达式重写为lambda:

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 回答