2

誰かが私にT-SQLステートメントをLINQtoEFクエリに変換するように頼みました。

SELECT * FROM  CopperPrices  
where ID in 
  (select max(ID) as ID from copperprices group by market, pname)

私は一般的なLINQ-TO-OBJECTのアイデアを使用し、次の答えを出します。

class CopperPrice
{
    public int ID { get; set; }
    public string Market { get; set; }
    public string PName { get; set; }
}

var result = from p in copperPrices
      group p by new { Market = p.Market, PName = p.PName } into g
      select g.OrderByDescending(p => p.ID).First();

ただし、次の例外のため、EFでは機能しません。

メソッド「First」は、最終的なクエリ操作としてのみ使用できます。このインスタンスでは、代わりにメソッド「FirstOrDefault」を使用することを検討してください

上記のT-SQLステートメントを1つのLINQクエリステートメントに変換できますか?

4

1 に答える 1

1

どうぞ:

var result1 = copperPrices.GroupBy(g => new { g.Market, g.PName }).Select
     (
         x => x.ToList().OrderByDescending(z => z.ID).FirstOrDefault()
     );

ここで重要なのは.Select(x => x.ToList())です。ToListは、IGroupingの値を返します。各値は、最終的に注文して最大値を選択する値です。

于 2012-07-18T04:09:18.053 に答える