【发布时间】:2019-07-10 02:03:59
【问题描述】:
我有以下实体:
public class Product {
public Int32 ProductId { get; set; }
public Double Price { get; set; }
public virtual ProductType ProductType { get; set; }
}
public class ProductType {
public Int32 ProductTypeId { get; set; }
public virtual ICollection<ProductTypeLocalization> ProductTypeLocalizations { get; set; }
}
public class ProductTypeLocalization {
public Int32 ProductTypeId { get; set; }
public String Language { get; set; }
public String Name { get; set; }
public String Description { get; set; }
public virtual ProductType { get; set; }
}
然后我有一个查询如下:
var models = await products.Select(product => new {
Id = product.Id,
Price = product.Price,
ProductType = new {
Id = product.ProductType.ProductTypeId,
Name = ???,
Description = ???
}
}).ToListAsync()
在我的查询中显示的位置
Name = ???,
Description ???
我需要从ProductTypeLocalization 和Language == "en" 获取Name 和Description。
我可以对每个都使用 FirstOrDefault,但我认为这不是一种有效的方法。
最好的方法是什么?
【问题讨论】:
-
你是对的。我错过了人际关系。刚刚更新了我的代码。对不起。
-
我猜最好的方法是做一个子查询
-
是的,但是是哪一个? Select 只能用于集合。
-
您的
ProductType将拥有ProductTypeLocalization的列表,对吗?您在查询中想要什么,那么它应该ProductType应该有单个ProductTypeLocalization -
是的,基本上我需要选择 ProductType 和一个 ProductTypeLocazition ,其中 Language 匹配“en”......但我一直在尝试 Select 和 SelectMany,但现在很幸运。您能否提供代码来阐明您的意思?
标签: linq linq-to-entities entity-framework-core