微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – LINQ外连接有重复

我在LINQPad中运行此查询.它的工作原理除了ProductSeries有重复的记录.

var query = from etaRecord in EtaRecord_0140

  join productSeriesRecord in ProductSeries
  on etaRecord.ProductSeriesID equals productSeriesRecord.ProductSeriesID
  into productSeriesGroup
  from productSeries in productSeriesGroup.DefaultIfEmpty()

  where etaRecord.State == "A"
  select new { EtaRecord = etaRecord,ProductSeriesRecord = productSeries };

query.Dump();

我尝试使用FirstOrDefault()而不是DefaultIfEmpty(),但我收到此错误

An expression of type ‘LINQPad.User.ProductSeries’ is not allowed in a
subsequent from clause in a query expression with source type
‘System.Linq.IQueryable’. Type inference Failed in
the call to ‘SelectMany’.

如何获取ProductSeries的FirstOrDefault(),以便每个EtaRecord只有一行?

.NET小提琴就在这里https://dotnetfiddle.net/kRrold

解决方法

看起来你需要分组:

var query = from etaRecord in EtaRecord_0140

join productSeriesRecord in ProductSeries
on etaRecord.ProductSeriesID equals productSeriesRecord.ProductSeriesID
into productSeriesGroup
from productSeries in productSeriesGroup.DefaultIfEmpty()

where etaRecord.State == "A"
group productSeries by new { etaRecord.ProductSeriesId,etaRecord } into g
select new 
       { 
         EtaRecord = g.Key.etaRecord,ProductSeriesRecord = g.Select(x => x).FirstOrDefault() 
        };

UPDATED FIDDLE

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐