Мне нужно собрать Distinct Id из определенной таблицы, используя LINQ. Загвоздка в том, что мне также нужен оператор WHERE, который должен фильтровать результаты, основываясь только на установленных мной требованиях. Относительно новичок в том, что нужно так много использовать LINQ, но я использую следующий код более или менее:
private void WriteStuff(SqlHelper db, EmployeeHelper emp)
{
String checkFieldChange;
AnIList tableClass = new AnIList(db, (int)emp.PersonId);
var linq = tableClass.Items
.Where(
x => x.UserId == emp.UserId
&& x.Date > DateBeforeChanges
&& x.Date < DateAfterEffective
&& (
(x.Field == Inserted)
|| (x.Field == Deleted)))
)
).OrderByDescending(x => x.Id);
if (linq != null)
{
foreach (TableClassChanges item in linq)
{
AnotherIList payTxn = new AnotherIList(db, item.Id);
checkFieldChange = GetChangeType(item.FieldName);
// Other codes that will retrieve data from each item
// and write it into a text file
}
}
}
Я попытался добавить .Distinct для var linq, но он по-прежнему возвращает повторяющиеся элементы (то есть с теми же идентификаторами). Я прочитал много сайтов и пытался добавить .Select в запрос, но вместо этого предложение .Where ломается. Есть и другие статьи, в которых запрос каким-то образом отличается от способа получения значений и помещения их в переменную. Я также пытался использовать .GroupBy, но при использовании Id в качестве ключа получаю «По крайней мере, один объект должен реализовывать IComparable».
Запрос на самом деле работает, и я могу вывести данные из столбцов с требуемыми спецификациями, но я просто не могу заставить работать .Distinct (единственное, чего на самом деле не хватает). Я попытался создать две переменные, одна из которых инициировала бы отдельный вызов, а затем имела вложенный foreach, чтобы гарантировать, что значения просто уникальны, но тысячи записей для сбора влияния на производительность слишком велики.
Я также не уверен, если бы мне пришлось переопределить или использовать IEnumerable для моего требования, и подумал, что я бы задал вопрос на всякий случай, если есть более простой способ, или если возможно иметь оба. Выберите и .Где работает только одно утверждение?