Linq to Entities中的自定义联盟

时间:2015-06-25 22:07:18

标签: c# sql linq entity-framework linq-to-sql

我需要在不使用IEqualityComparer的情况下将这些行合并到两个ID上,因为LINQ to Entities不支持这些行。

result我需要BizIdBazId的每个唯一组合,如果id对来自foos,则值为where,否则值应为零。这是一个非常简化的示例,实际上这些表非常大,并且这些操作无法在内存中完成。因此,此查询需要使用LINQ to Entities ,以便可以将其转换为有效的SQL并在数据库上执行。我怀疑这可以通过joinDefaultIfEmpty()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

1 个答案:

答案 0 :(得分:1)

您可以按两个字段进行分组,然后获取每个组的第一项:

foos.Union(bars).GroupBy(x => new { x.bizId, x.bazId })
    .Select(g => g.FirstOrDefault())