2011-01-18 21 views
1

Linqを使用して左結合を試みていて、失敗しています。私はいくつかの例に従うことを試みたが、この(failinmg)LINQクエリになってしまっていますLinqのエンティティへの左結合

var defaultCategories = (from cats in Db.categories 
           join defaults in Db.payee_default_category on cats.category_id equals 
            defaults.category_id 
            into merged 
           from results in merged.DefaultIfEmpty() 
           select new {cats.category_id, cats.description}).ToList(); 

だから、私は私のCategoriesテーブル内のすべての項目を取得する必要があり、Categories.category_id = Payee_Default_Categoryにpayee_default_categoryに参加します.Category_idを返し、Category_id、Category.Description、およびpayee_default_categoryテーブルにレコードがある場合はbooleanを返します。

ただし、実行時に(一致するレコードがある場合、私は...表示されないのですという事実を見下ろす)、私はエラーを取得する:

「エンティティへのLINQのメソッドを認識しない「にSystem.Collections .Generic.IEnumerable 1[Data.payee_default_category] DefaultIfEmpty[payee_default_category](System.Collections.Generic.IEnumerable 1 [Data.payee_default_category]) 'メソッドであり、このメソッドをストア式に変換することはできません。

+0

カテゴリごとに2つのデフォルト設定ができますか?その場合、2つのオブジェクトが同じカテゴリで返されますか? – StriplingWarrior

+0

また、どのバージョンのEntity Frameworkを使用していますか? – StriplingWarrior

+0

受取人は、デフォルトとして多くのカテゴリを持つことができます(ただし、カテゴリは受取人に一度のみリンクする必要があります)。私がやっている質問は、「受取人にデフォルトとして割り当てられたすべてのカテゴリを教えてください」です。 EF版に関して - 私は100%確実ではない。どうすればわかりますか?私はVisual Studio 2010を使用していますが、.NET Framework 3.5を使用しています。 – Craig

答えて

2

まず、DefaultIfEmptyメソッドは、Entity Frameworkのバージョン1ではサポートされていませんが、バージョン4ではサポートされています。アップグレードすることができます。

第2に、既定値があるかどうかを判断するブール値を探しているだけなので、実際の外部結合を "存在する"ほど大きくはしません。このようにすることができるはずです:

var defaultCategories = 
    (from cats in Db.categories 
    let defaults = Db.payee_default_category.Where(
     d => d.category_id == cats.category_id) 
    select new {cats.category_id, cats.description, hasDefaults = defaults.Any()}) 
    .ToList(); 

はまた、あなたのEntity Frameworkのコンテキストは、理想的にはあなたのクエリがさらに簡単になるだろうテーブルマッピング、で設定されます:

var defaultCategories = 
    (from c in Db.categories 
    select new {c.category_id, c.description, 
     hasDefaults = c.payee_default_categories.Any()}) 
    .ToList(); 
+0

それは修正のように見えます!ありがとう!しかし今、別の問題があります。リンクテーブルに外部キー制約を追加するのを忘れてしまった。私はそれらを追加し、私のEFモデルをリフレッシュしました。私がコンパイルするまで、すべて見えます。今私はエラーが表示されます:エラー3007:フラグメントのマッピングに問題があります。 EFは私の多対多のリンクテーブルが好きではないようです。これは既知の問題ですか? – Craig

+0

EFモデルをゼロから再作成し、問題は解決されました。あなたのソリューションは100%動作します。私はテーブルのマッピングを持っている、そしてそれは非常にうまくいっている..ありがとう。 – Craig

関連する問題