2011-01-28 15 views
0

私はバイク、シート、BikeSeatsテーブルを持っています。 BikeSeatsはマッパーテーブルで、BikeIDとSeatIDの複合キーです。他の列はありません。Linq to Entities .net4 EF

私は赤い色のバイクは持っているだろう、すべての座席の種類を取得したい、このEFにマッピングされている、唯一のバイクで、.NET 4、座席(およびbike.Seatsとseat.Bikes)のすべての

テーブルだけ持っているのでEFがない私にとっては本当に難しい部分がBikeSeatsが存在しないこと、それは基本的にbike.Seatsおよび/またはseat.Bikesにマップされていているエンティティに

をLINQのを使用して

select distinct s.* 
    from seats s 
      left join bikeSeats bs on s.seatID = bs.seatId 
    where bs.bikeId in (select distinct bikeId from bikes where color=red) 

( 2 ids)

このクエリを変換するすべてのヘルプはそこそこ

おかげでいただければ幸いです --MB

+0

:私はOPは彼がEntity Frameworkのを使用していることを示しているので、SQLの代わりにLINQのエンティティへのLINQを言うために、質問を編集しました。 – StriplingWarrior

答えて

2

小学校、私の愛するBoisson:FYI

var seatsOnRedBikes = ctx.Seats.Where(s => s.Bikes.Any(b => b.Color == "Red")); 
+0

質問は天才の仕事のように見え、あなたは私を尊敬しながら私を侮辱しました!それは天才です。私は明らかにlinqで何かを見逃しています。私を混乱させるいくつかのコメントがありましたが、それは消えました。また、別名はありませんが、何らかの理由で動作しています....ありがとうagain –

+0

@Massive Boisson - 私は私の答えを削除し、これが正しいので、upvoted、と私のwasnt。リレーションシップ内のすべての関連レコード(フィルタなしでLEFT OUTER JOINなど)を取得する場合は、積極的なロードが必要です。しかし、彼はここでフィルタリングしているので、それは必須ではなく、EFは必要とされるものを「うまくやっていく」でしょう。 – RPM1984

+0

@Massive Boisson:侮辱は意図していません:このような問題を解決するために非常に複雑なものを思いつくのは簡単なことです。これは、 "自分の自転車のいずれかに赤色の色が付いているすべての座席がほしい"という直接的な翻訳です。 ctx.Seatsは最初に各座席に対して1つの行だけを返すので、Distinctは不要です。 eager fetching commentsは、問題を複雑にしていたので、無視することができます。 – StriplingWarrior

0

まず例えば者は、それは言う私は自分のエンティティ名が聞かせているのか分からないあなたのエンティティのインスタンスを宣言する必要がBikeSeatEntity

List<Seat> GetSeats() 
     { 
      using (BikeSeatEntity bsEntity = new BikeSeatEntity()) 
      { 
       var seats = from s in bsEntity.Seats.Include("Bikes").Where(s => s.Bike.Color = "Red") 
          select s; 
       List<Seat> seatsList = seats.ToList(); 
       return seatsList; 
      } 
      return null; 
     } 

これが機能しない場合は、エンティティについて詳しくご説明ください。

+0

's => s.Bike'は' s => s.Bikes'です。それはコレクションなので、 '.Color'を実行すると動作しません。 – StriplingWarrior

+0

ああ申し訳ありません。 – AlaaL

関連する問題