我正在开发一个.NET应用程序,我需要根据条件从SQL Server 2008中过滤数据。我的数据结构如下所示:
结果应按键分组和排序。默认情况下,应为每个Key返回版本为null的行,但如果设置了revisionParameter,则应返回具有相应版本号的行。如果参数为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());
}
答案 0 :(得分: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
或指定值的记录。按键分组后,我们尝试查找任何具有值修订的记录(该值将等于过滤器)。如果没有带修订的记录,我们只需从组中获取第一条记录。