1

次の列のテーブルがあります

inspection_dt,
contact_dt,
description,
product_mod,
product_desc,
contact_nm,
history_id,
inspect_id,
history_type,
incident_product_id,
contact_history_id

LINQを使用して、このテーブルの行の一般的なリストをクエリします。ツイストは、history_idの最小(MIN)値が必要であり、このSQLクエリを模倣することです。

SELECT DISTINCT
    inspection_dt,
    contact_dt,
    description,
    product_mod,
    product_desc,
    contact_nm,
    MIN(history_id) AS history_id,
    inspect_id,
    history_type,
    incident_product_id,
    contact_history_id
FROM
    myTable
GROUP BY
    inspection_dt,
    contact_dt,
    description,
    product_mod,
    product_desc,
    contact_nm,
    inspect_id,
    history_type,
    incident_product_id,
    contact_history_id

私は次のようなスニペットを試しました

var searchData = items
    .GroupBy(i => new { i.history_id })
    .Select(g => new { history = g.Min() })
    .Distinct();

しかし、それでもすべてを台無しにする

MIN、MAXなどの関数を使用して行き詰まり、LINQでグループ化するので、助けていただければ幸いです。

ありがとう、

4

2 に答える 2

4

クエリを完全に模倣する場合は、SQLでグループ化するのと同じ列またはフィールドでグループ化する必要があります。次のようなものを試してください

.GroupBy(item => 
      new 
      {
          item.inspection_dt,
          item.contact_dt,
          item.description,
          item.product_mod,
          item.product_desc,
          item.contact_nm,
          item.inspect_id,
          item.history_type,
          item.incident_product_id
      }
     )
.Select(g => g.Min(item => item.history_id))
于 2011-01-07T17:55:05.097 に答える
1

以下のコードを試すことができます。

プロファイラーで表示するとSQLクロス結合が生成されることに気付きましたが、それはあなたが望むことを実行し、さらに微調整できる可能性があると思います。

var searchData = items.Select(x => new {x.inspection_dt,x.contact_dt, history= items.Min(j => j.history_id)}).Distinct();

お役に立てれば

于 2011-01-07T17:52:18.373 に答える