LINQ - 过滤带条件的重复项

时间:2013-04-16 09:14:24

标签: c# .net linq sql-server-2008 visual-studio-lightswitch

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

enter image description here

结果应按键分组和排序。默认情况下,应为每个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());
}

1 个答案:

答案 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或指定值的记录。按键分组后,我们尝试查找任何具有值修订的记录(该值将等于过滤器)。如果没有带修订的记录,我们只需从组中获取第一条记录。

相关问题