如何在实体框架中连接多个表

时间:2015-11-06 19:47:36

标签: c# asp.net-mvc entity-framework

我有以下代码,我正在使用实体框架,

abcde1234567890

我不想仅从Products表返回数据,而是想从ProductDetails表中返回数据。

另外,如果我想在这里添加where子句,我该怎么做?

我试过像这样的东西,但它没有用,

public IEnumerable<Product> GetProducts()
{
    var query = (from p in db.Products
                     join pd in db.ProductDetails
                         on p.ProductID equals pd.ProductID
                     select new
                     {
                         p.ProductName,
                         pd.IsEnabled
                     }).ToList();

        IEnumerable<Product> products =
            db.Products.Include(x => x.ProductDetail).ToList();

        return products;
}


public partial class Product
{
    public int ProductID { get; set; }
    public string ProductName { get; set; }
    public System.DateTime CreatedDate { get; set; }

    public virtual ProductDetail ProductDetail { get; set; }
}

我该怎么做?

3 个答案:

答案 0 :(得分:2)

您可以创建一个自定义类,只保留ProductNameIsEnabled,如下所示:

public class ProductEnableInfo
{
    public string ProductName { get; set; }
    public bool IsEnabled { get; set; }
}

然后您可以将方法更改为:

public IEnumerable<ProductEnableInfo> GetProducts()
{
    return db.Products.Select(
        x => new ProductEnableInfo
        {
            ProductName = x.ProductName,
            IsEnabled = x.ProductDetail.IsEnabled
        })
        .ToList();
}

<强>更新

您可以按照以下方式按产品ID进行过滤:

public IEnumerable<ProductEnableInfo> GetProducts(int product_id)
{
    return db.Products
        .Where(x => x.ProductID == product_id)
        .Select(
        x => new ProductEnableInfo
        {
            ProductName = x.ProductName,
            IsEnabled = x.ProductDetail.IsEnabled
        })
        .ToList();
}

答案 1 :(得分:1)

您可以创建DTO对象并使用Select()方法,您可以更改查询的输出,样本:

public class ProductDto
{
   public int Id { get; set; }
   public string Name { get; set; }
   public bool IsEnalbed { get; set; }
}

并执行这样的查询;

IEnumerable<ProductDto> result = db.Products    
                                   .Where(x => x.ProductId == productId) // if you want to filter, just add .Where() method                                   
                                   .Select(x => new ProductDto()
                                          {
                                             Id = x.ProductID,
                                             Name = x.ProductName,
                                             IsEnabled = x.ProductDetail.IsEnabled
                                          })
                                   .ToList();

答案 2 :(得分:1)

这应该是给你你需要的东西。

public IEnumerable<Product> GetProducts()
{
    IEnumerable<Product> products =
        db.Products.Include(x => x.ProductDetail).ToList();

    return products;
}

访问IsEnabled属性,您只需引用ProductDetail属性

var products = GetProducts();
foreach (var product in products)
{
    bool enabled = product.ProductDetail.IsEnabled;
}