2016-03-24 8 views
1

2つのテーブルを照会してレコードを正常に返すLINQクエリがあります。私はそれが最新のレコードだけを返すようにしたいが、それを動作させるのに問題がある。すべてのレコードをエラーなしで返します。内部結合を持つLINQクエリで最新の日付を選択します。

私のクエリは次のとおりです。

var viewModel = from area in db.area 
        join sample in db.sample on area.location_id equals sample.location_id 
        from s in db.sample.OrderByDescending(s => s.sample_date).Take(1) 

        select new AreaViewModel { h_area = area, s_sample = sample }; 

        return View(viewModel); 

完全に立ち往生し、大歓迎を助けます!

答えて

3

あなたが好きなものを記述する必要があり、間違った場所でTake()メソッドを呼び出している:

var viewModel = (from area in db.area 
       join sample in db.sample on area.location_id equals sample.location_id 
       from s in db.sample 
       select new AreaViewModel 
         { 
         h_area = area, 
         s_sample = sample 
         }).OrderByDescending(s => s.s_sample.sample_date) 
         .FirstOrDefault(); 

コレクションを返すようにしたい場合には、コレクションを返さないように、そしてあなたは、代わりにFirstOrDefault()のがTake(1)を使用することができます。私は何を達成しようとしているが、このと思い

+0

これは素晴らしい作品です。 – emerfan

1

FirstOrDefaultメソッドを呼び出す
var area= (from area in db.area 
      join sample in db.sample on area.location_id equals sample.location_id 
      orderby sample.sample_date descending 
      select new AreaViewModel { h_area = area, s_sample = sample }).FirstOrDefault(); 

あなたが原因それに最新のレコードを取得しますが、あなたのLINQによって生成されたSQLクエリにTOP(1)を追加しますクエリ。

関連する問題