我遇到了用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 };
所以我的问题是,如果类中没有可用的属性,如何加入这些表。
非常感谢您的帮助!
答案 0 :(得分:1)
您不需要JOIN
:改为使用导航属性:
Parameter
属性。var parameters = db.Categories.First(x => x.CategoryId == 10).Parameter.ToList();