LINQ-запрос для определения минимального значения одного столбца - PullRequest
0 голосов
/ 07 января 2011

У меня есть таблица со следующими столбцами

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

Я хотел бы использовать LINQ для запроса общего списка строк из этой таблицы.Суть в том, что я хочу наименьшее (MIN) значение 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, и был бы признателен за любую помощь, которую я могу получить.

Спасибо,

Ответы [ 2 ]

3 голосов
/ 07 января 2011

Если вы хотите полностью имитировать запрос, вам нужно сгруппировать по тем же столбцам или полям, по которым вы группируете свой 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))
1 голос
/ 07 января 2011

Вы можете попробовать этот код ниже.

Я заметил, что он генерирует перекрестное соединение SQL, когда я просматриваю его в профилировщике, но я думаю, что он делает то, что вы хотите, и вы могли бы настроить его больше.

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

Надеюсь, это поможет

...