如何使用 linq 联接 2 个表,但避免匿名对象

本文关键字:对象 linq 何使用 联接 个表 | 更新日期: 2023-09-27 18:32:26

我想使用 linq 连接 2 个表并避免匿名对象。

到目前为止,我使用元组。

var products = from tm in db.TargetMarkets
                join tp in db.Products on tm.product_id equals tp.id
                where tm.country == 2
                select Tuple.Create<TargetMarket, Product>(tm, tp);

但是,当我为每个人

foreach (var p in products)
{
    var a = p.Item1.id;
}

它引发异常

LINQ to Entities 无法识别方法"System.Tuple"2

问题

  1. 有没有办法让我的代码保持强类型
  2. 元组有什么问题(可选)

如何使用 linq 联接 2 个表,但避免匿名对象

有没有办法让我的代码保持强类型

您可以定义一个新类型并创建该类型的对象,而不是匿名对象。

class ProductTargetMarket
{
   //Attributes
} 
var ProductsTargetMarkets = from tm in db.TargetMarkets
            join tp in db.Products on tm.product_id equals tp.id
            where tm.country == 2
            select new ProductTargetMarket{Attribute1OfProductTargetMarket = tp.Attribute1, Attribute1OfProductTargetMarket = tm.Attribute1 };
要创建一个元组,

您可以先将其转换为匿名类型,然后将其转换为元组,请参阅此帖子和此帖子。