質問

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

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の最小(最小)値が必要であり、この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でのグループ化を使用して立ち往生し、私が得ることができる助けに感謝します。

ありがとう、

役に立ちましたか?

解決

クエリを完全に模倣したい場合は、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))

他のヒント

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

プロファイラーで見るとSQLクロス結合が生成されることに気付きましたが、それがあなたが望むことをしていると思います。

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

お役に立てれば

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top