加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – LINQ外连接有重复

发布时间:2020-12-15 22:11:39 所属栏目:百科 来源:网络整理
导读:我在LINQPad中运行此查询.它的工作原理除了ProductSeries有重复的记录. var query = from etaRecord in EtaRecord_0140 join productSeriesRecord in ProductSeries on etaRecord.ProductSeriesID equals productSeriesRecord.ProductSeriesID into productS
我在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读