我有一个名为Quote
和QuoteInfo
的班级。 Quote
班级的List
QuoteInfo
。像这样:
public class Quote
{
...
public virtual List<QuoteInfo> QuoteInfo { get; set; }
...
}
我的QuoteInfo
类也有Language
属性。像这样:
public class QuoteInfo
{
...
public virtual Language Language { get; set; }
...
}
正如您在我查询Quotes
时所看到的那样......
var quotes = dbContext.Quotes.ToList();
...所有QuoteInfo
都带有它(当然启用了延迟加载)。但我只是希望用特定的语言获得QuoteInfo
。我怎么能在一个查询中这样做?
提前致谢。
编辑:例如我有一个带有2个QuoteInfos的报价。我想要做的是获取Quote和QuoteInfo列表,其中包含具有特定语言的列表,该列表将是1 Quote并且其QuoteInfo列表的计数为1.
答案 0 :(得分:1)
试试这个:
var quotes = dbContext.Quotes
.Select(x=>new
{
Quote=x,
QuouteInfos=x.QuoteInfo.Where(y=>y.Language==myPreferedLanguage)
});
它会将其选择到新列表,其中Quoute
和QouteInfos
仅位于myPreferedLanguage
答案 1 :(得分:1)
如果要应用过滤,则需要使用DbContext直接查询QuoteInfo实体。
int quoteId = ; // Id of the Quote you want to get the infos
var myLanguage = ; // lange of the infos you want to get
var infos = dbContext.QuoteInfos.Where(p=>p.QuoteId == quoteId && p.Language == myLanguage);
使用NavigationProperties(在您的情况下为QuoteInfo
)将始终加载整个相关实体,并且在内存中应用使用Where
语句的任何附加过滤。
<强>更新强> 当我理解你的评论权利时,你想获得所有报价,其中报价信息与特定语言相匹配。在这种情况下,您可以使用以下查询。
var languageDependantQuote = from quote in dbContext.Quotes
from info in quote.QuoteInfos
where info.Language == myLanguage
select quote;