Asp.net mvc4如何使用linq加入实体

时间:2013-08-11 22:01:52

标签: asp.net linq entity-framework

我遇到了用linq语言加入两个实体的问题。

我有型号类别:

public class Category : DbContext
{
  [Key, Column(Order = 0),DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public int CategoryId { get; set; }

  Key, Column(Order = 1)]
  public int ShopId { get; set; }

  public string Name {get;set;} 

  public virtual ICollection<Parameter> Parameter { get; set; }
}

和模型Parametr

public class Parameter : DbContext
{
    [Key, Column(Order = 0),DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ParamId { get; set;}

    [Key, Column(Order = 1)]
    public int ShopId { get; set;}

    public string Name {get; set;}
    public string Value {get;set;}
}

关系是一对多,所以一个类别可以有0 ... n参数。

更新 当然,这种关系很多很多。这就是为什么参数在模型中没有CategoryId属性的原因。

我首先使用代码和迁移工具来更新数据库;

在数据库中MSSQL Express是3tables。类别,类别参数和参数。 表CategoryParameter是自动创建的,我没有此表的模型。

使用多个参数创建新类别正常工作。所有3个表都包含有效数据。

现在我的问题是:

我正在尝试加载一个类别的所有参数。该命令如下所示:

var parameters = from c in db.Categories
                join p in db.Parameters
                on new { ??? , c.ShopId } equals new { ??? , p.ShopId } 
                where c.ShopId == userProfile.ShopId && c.CategoryId == id
                select new { ParamId = p.ParamId, Name = p.Name };

所以我的问题是,如果类中没有可用的属性,如何加入这些表。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您不需要JOIN:改为使用导航属性:

  1. 找到类别实体。
  2. 使用类别实体的Parameter属性。
  3. var parameters = db.Categories.First(x => x.CategoryId == 10).Parameter.ToList();