C# EF:使用多对一关系获取数据
我已从数据库生成实体模型:C# EF:使用多对一关系获取数据,c#,sql,asp.net-mvc,entity-framework,C#,Sql,Asp.net Mvc,Entity Framework,我已从数据库生成实体模型: public partial class Product { public Product() { this.ProductMeta = new HashSet<ProductMeta>(); } public int ProductID { get; set; } public int DomainId{ get; set; } public bool IsDeleted { get; s
public partial class Product
{
public Product()
{
this.ProductMeta = new HashSet<ProductMeta>();
}
public int ProductID { get; set; }
public int DomainId{ get; set; }
public bool IsDeleted { get; set; }
public virtual ICollection<ProductMeta> ProductMeta { get; set; }
}
我想做的是从两个表中获取数据。因为ProductMeta有许多变体,所以将Product与ProductMeta连接的最佳方式是什么取决于languageId。我的位置和选择是否有效?当我查看生成的SQL时,有许多嵌套的SELECT FROM。这是正常的吗
var result =
from p in _dbContext.Set<Product >()
where (p.DomainID == domainId
&& p.IsDeleted == false
&& p.ProductMeta.Select(pm => pm.LanguageID == languageId && pm.IsDeleted == false).FirstOrDefault()
select(new
{
ProductID = p.ProductID,
ProductName = p.ProductMeta.FirstOrDefault().ProductName
});
var结果=
来自_dbContext.Set()中的p
其中(p.DomainID==DomainID
&&p.IsDeleted==false
&&p.ProductMeta.Select(pm=>pm.LanguageID==LanguageID&&pm.IsDeleted==false)
选择(新建)
{
ProductID=p.ProductID,
ProductName=p.ProductMeta.FirstOrDefault().ProductName
});
谢谢!您可以尝试从
ProductMeta
var result =
(from pm in _dbContext.Set<ProductMeta>()
where pm.LanguageID == languageId
&& pm.IsDeleted == false
&& pm.Product.DomainID == domainId
&& pm.Product.IsDeleted == false
select pm
);
在linq查询之后追加FirstOrDefault()
,以仅获取单个ProductMeta
对象
select pm).FirstOrDefault();
我最近发现了。看到这些重复的谓词,看起来真的可以帮助你。这只是一个例子。我在select中有很多字段,都来自
Product
和ProductMeta
,所以我必须从Product
中进行选择。不,你只需要选择ProductMeta
并包含Product
>。我会更新答案。如果您试图从select中构建某种匿名类型,那么您只需使用Field1=pm.product.Field1
etcAre获取产品属性。您确定这是个好主意吗?我有6个表之间的join查询,我想用EF编写,因此我应该在每个表之间使用Include
或者,我需要用EF生成模型,它有表之间的连接?如果想将6个表中的数据平齐,您可以考虑使用视图,然后将视图导入到模型中。
from pm in _dbContext.Set<ProductMeta>().Include("Product")
select pm).FirstOrDefault();