1

我有一个名为Quoteand的类QuoteInfo。并且Quote该类有一个ListQuoteInfo像这样:

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();

...所有的QuoteInfos 都带有它(当然启用了延迟加载)。但我只想获得QuoteInfo具有特定语言的 s 。我怎样才能在一个查询中做到这一点?

提前致谢。

编辑:例如,我有一个带有 2 个 QuoteInfos 的报价。我想要做的是获取 Quote 和包含具有特定语言的 QuoteInfo 列表,这将是 1 Quote 并且其 QuoteInfo 列表的计数为 1。

4

2 回答 2

0

尝试这个:

var quotes = dbContext.Quotes
    .Select(x=>new 
     { 
         Quote=x, 
         QuouteInfos=x.QuoteInfo.Where(y=>y.Language==myPreferedLanguage) 
     });

它会将其选择到您拥有QuouteQouteInfos仅在myPreferedLanguage

于 2013-09-23T06:46:43.530 回答
0

如果要应用过滤,则需要直接使用 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;
于 2013-09-23T07:01:11.447 回答