我只需要与Linq进行完全外连接,但是当我联合两个quire时,我得到了这个错误:
实例参数:无法从'System.Linq.IQueryable'转换为'System.Linq.ParallelQuery
这是我的完整代码:
using (GoodDataBaseEntities con = new GoodDataBaseEntities())
{
var LeftOuterJoin = from MyCustomer in con.Customer
join MyAddress in con.Address
on MyCustomer.CustomerId equals MyAddress.CustomerID into gr
from g in gr.DefaultIfEmpty()
select new { MyCustomer.CustomerId, MyCustomer.Name, g.Address1 };
var RightOuterJoin = from MyAddress in con.Address
join MyCustomer in con.Customer
on MyAddress.CustomerID equals MyCustomer.CustomerId into gr
from g in gr.DefaultIfEmpty()
select new { MyAddress.Address1, g.Name };
var FullOuterJoin = LeftOuterJoin.Union(RightOuterJoin);
IEnumerable myList = FullOuterJoin.ToList();
GridView1.DataSource = myList;
GridView1.DataBind();
}
答案 0 :(得分:2)
两个序列的类型不一样,因此您无法执行Union
。
new { MyCustomer.CustomerId, MyCustomer.Name, g.Address1 };
new { MyAddress.Address1, g.Name };
尝试确保字段具有相同名称和类型的相同顺序。
答案 1 :(得分:1)
为什么不把它全部选为一件事?根据您的设置(即,如果您在表上正确设置了外键),您不需要进行显式连接:
var fullJoin = from MyCustomer in con.Customer
select new {
MyCustomer.CustomerId,
MyCustomer.Name,
MyCustomer.Address.Address1,
MyCustomer.Address.Name
};
方法语法:
var fullJoin = con.Customers.Select(x => new
{
x.CustomerId,
x.Name,
x.Address.Address1,
x.Address.Name
});
答案 2 :(得分:0)
union
将一个集合中的项目附加到另一个集合的末尾,因此如果每个集合有5个项目,则新集合将有10个项目。
你似乎想要的是最终得到5行,每行都有更多的信息。这不是Union
的工作。您可以使用Zip()
执行此操作,但您对DLeh所示的单个查询确实最合适。