C#追加相同类型的Linq查询

时间:2010-10-07 23:59:57

标签: c# linq

我有两个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将卡车数据附加到汽车数据,以便生成的查询包含汽车和卡车数据?

2 个答案:

答案 0 :(得分:4)

如果结果类型相同,则可以使用Enumerable.Concat将它们组合起来。

但是,我通常不会建议使用匿名类型 - 而是建议我创建一个自定义类来保存您的三个(或更多)属性。考虑到上面的代码,有可能类型可能是相同的后编译,但如果没有更多信息,就无法确定。

就个人而言,我要么使用共享接口(即:CarTruck实现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,名称和公司类型相同。