【发布时间】:2015-02-24 14:32:40
【问题描述】:
我正在 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(),但出现此错误:
“LINQPad.User.ProductSeries”类型的表达式不允许在 具有源类型的查询表达式中的后续 from 子句 'System.Linq.IQueryable'。类型推断失败 对“SelectMany”的调用。
如何获取 ProductSeries 的 FirstOrDefault() 以便每个 EtaRecord 只有一行?
.NET 小提琴在这里:https://dotnetfiddle.net/kRrold
【问题讨论】:
-
左外连接可以返回重复项,显示你的期望和当前的输出
-
查询当前不包含重复项,因此无法显示错误输出。问题是数据可能会改变,然后将来会有重复。我需要提防这种情况。我只想要每个 etaRecord 一行。并且该 etaRecord 可以有一个空 ProductSeries,或者只有一个 ProductSeries,即使有多个。
-
在我的帖子中添加了 .NET fiddle 链接。
-
您能解释一下您期望示例代码的结果是什么吗?
-
@BobHorn 更新小提琴:dotnetfiddle.net/uIIHi2
标签: c# linq linq-to-sql linqpad