3
我需要将这些行在两个ID上联合使用,而不使用IEqualityComparer
,因为LINQ to Entities不支持这些行。Linq中的自定义联盟到实体
在result
我需要的BizId
和BazId
每一个独特的组合,从foos
的值,如果ID对从那里来,否则值应为零。这是一个非常简单的例子,实际上这些表格非常大,这些操作不能在内存中完成。因此,此查询需要与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
它是安全的假设FOOS永远是第一位在列表或应该是被检查?我认为这会起作用! –
如果你想要一个特定的项目在上面,你应该添加'g.OrderBy(x => x ....)。FirstOrDefault()'。 –
根据这个问题,如果它存在,我需要Value。为了得到这个,我修改了一下你的查询:'foos.Union(bars).GroupBy(x => new {x.bizId,x.bazId})。Select(g => g.OrderByDescending(x => x。分配).FirstOrDefault())'。非常感谢! –