我需要在两个id上联合这些行,但不能使用IEqualityComparer
,因为这些不支持LINQ to Entities。
在result
中,我需要每个唯一的BizId
和BazId
组合,如果id对来自foos
,则将使用该值,否则该值应为零。这是一个大大简化的示例,在现实中,这些表非常大,这些操作无法在内存中完成。因此,这个查询需要使用LINQ to Entities工作,以便将其转换为有效的SQL并在数据库上执行。我怀疑这可以通过某些where
、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
g.OrderBy(x => x....).FirstOrDefault()
。 - Gert Arnoldfoos.Union(bars).GroupBy(x => new { x.bizId, x.bazId }).Select(g => g.OrderByDescending(x => x.Allocation).FirstOrDefault())
。非常感谢! - Kevin Brey