2016-04-27 34 views
0

LINQ to SQLでSQLクエリを作成しようとしていますが、4時間後に私はあきらめました。LINQ to SQLのSQLクエリ

select B.* from Bid B 
join 
(
select BidId, max(BidVersion) as maxVersion 
from Bid 
group by BidId 
) X on B.BidId = X.BidId and B.BidVersion = X.maxVersion 

私はstackoverflowでいくつかのヒントを見たが、役に立たなかった。私はいくつかのように非常に悪いのコードを使用しています

 List<Bid> bidEntities = new List<Bid>(); 

     var newest = from bid in _dbContext.Bids 
        group bid by bid.BidId into groups 
        select new { Id = groups.Key, Vs = groups.Max(b => b.BidVersion) }; 

     foreach (var group in newest) 
     { 
      bidEntities.Add(await _dbContext.Bids.Where(b => b.BidId == group.Id && b.BidVersion == group.Vs).SingleOrDefaultAsync()); 
     } 

はどんなアドバイスをいただき、ありがとうございます。このような

答えて

0

何か動作するはずです:LINQで

var rows = Bids 
      .GroupBy(b => b.BidId) 
      .Select(g => g.OrderByDescending(gg => gg.BidVersion).FirstOrDefault()) 

を、それはSQLの道 "で考えないように時々役立ちますが、あなたが本当に欲しいものについて。各入札単価の最高入札価格が必要です

+1

ありがとうございます!一つのこと:First()の代わりにFirstOrDefault()を使わなければならなかった。あなたの解決策では例外が発生しました:) –

+0

@Piotr_Kowalskiああ、私の悪い - FirstOrDefaultは正しい動作です:) - 私は将来の視聴者のために修正するための編集を行います – Rob