我需要在不使用IEqualityComparer
的情况下将这些行合并到两个ID上,因为LINQ to Entities不支持这些行。
在result
我需要BizId
和BazId
的每个唯一组合,如果id对来自foos
,则值为where
,否则值应为零。这是一个非常简化的示例,实际上这些表非常大,并且这些操作无法在内存中完成。因此,此查询需要使用LINQ to Entities ,以便可以将其转换为有效的SQL并在数据库上执行。我怀疑这可以通过join
,DefaultIfEmpty()
和Union
而不是Distinct()
和var foos = from f in Context.Foos where f.isActive select new { BizId = f.bizId, BazId = f.BazId, Value = f.Value };
var bars = from b in Context.Bars where b.isEnabled select new { BizId = b.bizId, BazId = b.BazId, Value = 0 };
var result = foos.Union(bars).Distinct(); //I need this to compare only BizId and BazId
的某种组合来完成,但我现在不知所措
ID SartTime EndTime
1 06-24-2015 08:00 06-24-2015 08:30
2 06-24-2015 08:30 06-24-2015 09:00
3 06-24-2015 09:00 06-24-2015 09:30
4 06-24-2015 09:30 06-24-2015 10:00
答案 0 :(得分:1)
您可以按两个字段进行分组,然后获取每个组的第一项:
foos.Union(bars).GroupBy(x => new { x.bizId, x.bazId })
.Select(g => g.FirstOrDefault())