簡體   English   中英

Linq全外部聯接錯誤

[英]Linq Full Outer Join Error

我使用Linqpad連接到Adventure Works 2012數據庫,如下所示:

在此處輸入圖片說明

我正在嘗試編寫完整的外部聯接。 我的研究告訴我,它應該看起來像這樣(如屏幕截圖所示):

var LeftOuterJoin =  from p in Products
join pv in ProductVendors on p.ProductID equals pv.ProductID into ppv
from pv in ppv.DefaultIfEmpty()
select new {ProductName = p.Name};

var RightOuterJoin =  from v in Vendors
join pv in ProductVendors on v.BusinessEntityID equals pv.BusinessEntityID into ppv
from pv in ppv.DefaultIfEmpty()
select new {VendorName = v.Name};

LeftOuterJoin.Union(RightOuterJoin);

但是,屏幕截圖(請參見屏幕截圖)中的錯誤是:

'System.Linq.IQueryable<AnonymousType#1>' does not contain a definition for 'Union' and the best extension method overload 'System.Linq.ParallelEnumerable.Union<TSource>(System.Linq.ParallelQuery<TSource>, System.Collections.Generic.IEnumerable<TSource>)' has some invalid arguments

Instance argument: cannot convert from 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.ParallelQuery<AnonymousType#2>'

問題是什么?

如我所見,存在類型問題,兩個匿名類型具有不同的屬性,因此這將導致使用Union的問題。 您可以創建具有相同屬性的通用類型並使用它。 或同時具有屬性和根據查詢使用:

var LeftOuterJoin =  from p in Products
join pv in ProductVendors on p.ProductID equals pv.ProductID into ppv
from pv in ppv.DefaultIfEmpty()
select new {VendorName = "",
            ProductName = p.Name,};

var RightOuterJoin =  from v in Vendors
join pv in ProductVendors on v.BusinessEntityID equals pv.BusinessEntityID into ppv
from pv in ppv.DefaultIfEmpty()
select new {VendorName = v.Name,
            ProductName = "",};

var result = LeftOuterJoin.Union(RightOuterJoin).ToList(); // force execution to get results.

如果您使用的是LinqPad,請使用它

var result = LeftOuterJoin.Union(RightOuterJoin)
result .Dump();

這將為您工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM