1

andという名前のクラスがQuoteありQuoteInfoます。QuoteクラスにはofListがあり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();

...すべてのQuoteInfos が付属しています(もちろん、遅延読み込みが有効になっています)。QuoteInfoしかし、特定の言語で sを取得したいだけです。1回のクエリでそれを行うにはどうすればよいですか?

前もって感謝します。

編集: たとえば、2 つの QuoteInfo を持つ Quote があります。私がやりたいのは、Quote と、特定の言語を持つものを含む QuoteInfo リストを取得することです。これは 1 Quote で、その QuoteInfo リストのカウントは 1 です。

4

2 に答える 2

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 に答える
0

これを試して:

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

Quouteそれはあなたが持ってQouteInfosいる新しいリストにそれを選択しますmyPreferedLanguage

于 2013-09-23T06:46:43.530 に答える