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

C# C追加相同类型的Linq查询,c#,linq,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查询,我在两个不同的表上运行,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将卡车数据附加到汽车数据,以便生成的查询同时包含汽车和卡车数据?

如果生成的类型是等效的,则可以使用组合它们

但是,我通常不建议对匿名类型执行此操作,而是建议创建一个自定义类来保存三个或更多属性。根据上面的代码,编译后的类型可能是相同的,但如果没有更多信息,就无法确定


就个人而言,我要么使用共享接口,即:让Car和Truck使用接口中的那些属性实现ICompanyInfo,并将Car强制转换到接口中,要么创建一个自定义类,并从两个查询中返回该类,然后使用Concat连接它们。

如果生成的类型相同,您可以使用来组合它们

但是,我通常不建议对匿名类型执行此操作,而是建议创建一个自定义类来保存三个或更多属性。根据上面的代码,编译后的类型可能是相同的,但如果没有更多信息,就无法确定

就个人而言,我要么使用共享接口,即:让Car和Truck使用接口中的那些属性实现ICompanyInfo,并将Car强制转换到接口中,要么创建一个自定义类,并从两个查询中返回该类,然后使用Concat连接它们。

或者,如果它们是同一类型,则可以使用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、名称和公司类型相同。

或者,如果它们是相同的类型,则可以使用联合运算符。这也适用于具有相同成员的匿名类型:

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、名称和公司类型在汽车和卡车中都相同。

只要匿名类型具有相同数量的属性、相同的名称和类型以及相同的顺序,就可以使用Concat on。如果属性类型不匹配,编译器将向您发出警告。@Enigmativity:是-因此我说它可能会工作。然而,这种情况会导致脆弱的软件,不适合长期维护。我不推荐匿名类型做这样的事情——这显然是OP软件中的一个重要概念。这不是一个伟大的设计,目前,我只是想创建一个简单的方法来填充这个临时表单上的下拉列表。将来,汽车和卡车将实现IVehicle接口。我真的不知道在linq查询中在datatables上设置接口的最佳方法,但当我到达它时,我会跨越这座桥。只要匿名类型具有相同数量的属性,相同的名称和类型,以相同的顺序,那么它们就可以使用Concat on。如果属性类型不匹配,编译器将向您发出警告。@Enigmativity:是-因此我说它可能会工作。然而,这种情况会导致脆弱的软件,不适合长期维护。我不推荐匿名类型做这样的事情——这显然是OP软件中的一个重要概念。这不是一个伟大的设计,目前,我只是想创建一个简单的方法来填充这个临时表单上的下拉列表。将来,汽车和卡车将实现IVehicle接口。我真的不知道在linq查询中在datatables上设置接口的最佳方法,但当我到达它时,我将跨越这座桥。Union假设OP不需要重复项,这可能是一个安全的假设。在这种情况下,Union假设OP不需要重复项,这可能是一个安全的假设