我有两个linq查询,我在两个不同的表上运行,Car和Truck。从这些查询中,我选择了ID,名称和公司。
var car = from c in db.Cars
select new {ID = c.ID, Name = c.Name, Company = c.Company};
var truck = from t in db.Trucks
select new {ID = t.ID, Name = t.Name, Company = t.Company};
如何使用Linq将卡车数据附加到汽车数据,以便生成的查询包含汽车和卡车数据?
答案 0 :(得分:4)
如果结果类型相同,则可以使用Enumerable.Concat将它们组合起来。
但是,我通常不会建议使用匿名类型 - 而是建议我创建一个自定义类来保存您的三个(或更多)属性。考虑到上面的代码,有可能类型可能是相同的后编译,但如果没有更多信息,就无法确定。
就个人而言,我要么使用共享接口(即:Car
和Truck
实现ICompanyInfo
与接口中的那些属性),并将汽车强制转换回接口,或创建一个自定义类,并从两个查询返回,然后使用Concat加入它们。
答案 1 :(得分:0)
或者您可以使用Union
运算符,如果它们是相同的类型。这也适用于具有相同成员的匿名类型:
var vehicles = from c in db.Cars
select new {ID = c.ID, Name = c.Name, Company = c.Company};
vehicles.Union(from t in db.Trucks
select new {ID = t.ID, Name = t.Name, Company = t.Company};
假设汽车和卡车的id,名称和公司类型相同。