2016-09-02 2 views
0

から匿名型を取得する私は、多くの関係に多くのではニュースに関連したカテゴリIDのNewsImageフィールドとリストを取得する必要があります...しかし、それは私にエラーを与える:C#の:どのようにLINQの結果

タイプのjoin節の式の1つが間違っています。「Join」の呼び出しでタイプ推論が失敗しました。

私のコードは、問題がon文の中で、この

var Result1 = (from c in db.News 
        join d in db.Categories 
       on c.NewsId equals d.News.Select(l => l.NewsId) 
        where c.NewsId == 1 
        select new { c.NewsImagePath, d.CategoryId }).ToList(); 
+0

'ことを確認してくださいc.NewsId'と 'dn.News.Select'は同じ型です。 'Select'は' IEnumberable'を返します。 – Venky

+0

あなたのモデルをここに投稿すると、より理解を深めることができます。あなたが 'naviagationプロパティ'を定義しているなら、それは簡単でなければなりません。 – Venky

答えて

1

あなたは、私が書くでしょうnnの関係を定義するナビゲーションプロパティを持っていると仮定すると:

var result = db.News 
    .Where(x => x.NewsId == 1) 
    .SelectMany(x => x.Categories, 
       (news, category) => new { news.NewsImagePath, category.CategoryId }) 
    .ToList(); 
+0

絶対に! 'FirstOrDefaut()'でナビゲーションプロパティ 'select'の' join'はばかげています。 –

+0

@LeBaptiste、ありがとうございました:)これはまさに私が探していたものです。あなたが気にしないなら、ラムダ式の代わりにLINQクエリを使用して同じことを達成することができれば感謝します。 – Lucy

+0

@Lucy同等のクエリ構文を取得するには、db.Categoriesの 'join dを置き換えます。あなたの質問に 'from d。c.Categories'があります。 –

1

のように見えます。

on c.NewsId equals d.News.Select(l => l.NewsId) 

右側の選択は、あなたが欲しいものではありませんこれは、ニュースのIEnumerableを返します。このような

何かが技術的に動作します:

on c.NewsId equals d.News.Select(l => l.NewsId).FirstOrDefault() 

しかし、それは論理的に意味がありません。

私は、クエリ全体が異なって構築されるべきだと思う。私は、ニュースのカテゴリリストにニュース項目が含まれているときに参加したいと思う。あなたがjoinステートメントを使用することができない場合には、それはやや次のようになります。

from n in db.News 
from c in db.Categories 
where c.News.Select(ne => ne.NewsId).Contains(n.NewsId) 
select new { n.NewsImagePath, c.CategoryId } 
+0

ありがとうございました:) LeBaptisteの回答がうまくいきました.Lambda式の代わりにLINQクエリを使用してLeBaptisteの回答をどのように達成できるのか感謝します – Lucy

+0

残念ながら、これは不可能です、 'SelectMany 'がクエリ構文で実装されていない場合は、メソッド構文を使用する必要があります。 –

関連する問題