当属性是列表时,如何按表的特定值查询表
本文关键字:查询表 何按表 属性 列表 | 更新日期: 2023-09-27 18:32:33
我有一个名为Quote
和QuoteInfo
的类。Quote
类有QuoteInfo
List
.喜欢这个:
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 个报价信息的报价。我想做的是获取报价和包含特定语言的报价信息列表,这将是 1 个报价,其报价信息列表的计数为 1。
试试这个:
var quotes = dbContext.Quotes
.Select(x=>new
{
Quote=x,
QuouteInfos=x.QuoteInfo.Where(y=>y.Language==myPreferedLanguage)
});
它会将其选择到新列表中,其中您有Quoute
和QouteInfos
myPreferedLanguage
如果要应用筛选,则需要直接使用 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;