0

私はテーブル製品を持っています。製品は、1対多の関係でProductDescriptionに関連付けられています。ProductDescriptionには、製品ごとに複数の行を含めることができます。製品の説明に複数の翻訳がある場合は、複数の行があります。製品は言語と多対1の関係にあります。言語には、言語コード(en、esなど)とLanguageId(ProductDescriptionにもあります)があります。

ユーザーが商品をリクエストできるようにし、さらに特定の言語の説明のみを返すようにアプリケーションに指示したいと思います。

LinqtoEntitiesでこれを達成するのに時間がかかります。次のようなSQLを生成したい:

SELECT * FROM Product p
JOIN ProductDescription pd ON p.ProductId = pd.ProductId
JOIN (SELECT * FROM Language WHERE AlternateCode = 'es') AS l ON pd.LanguageId = l.LanguageId

(AlternateCodeは言語コードのフィールド名です)

誰かがこれを行う方法を知っていますか?私が今残しているのは、すべての言語をプルダウンしてから、Linq to Objectsでそれらをフィルターで除外することです。これは、確かに理想的とは言えません。製品ごとの言語コードをループで取得することはできますが、これには複数のSQLラウンドトリップが必要になりますが、これも望ましくありません。

助けてくれてありがとう!

4

1 に答える 1

0

積極的な読み込みではなく、投影を使用します。

var q = from p in Context.Product
        select new ProductPresentation
        {
           Id = p.Id,
           // etc.
           Description = new ProductDescriptionPresentation
           {
               Language = (from l in p.ProductDescription.Languages
                           where l.AlternateCode.Equals("es", StringComparison.OrdinalIgnoreCase)
                           select l).FirstOrDefault(),
               // etc.
           }
        };
于 2010-07-26T13:57:46.667 に答える