LINQ FirstOrDefault проблема - PullRequest
       1

LINQ FirstOrDefault проблема

2 голосов
/ 08 февраля 2011

Я застрял в запросе LINQ.В основном у меня есть две таблицы, связанные ассоциацией по ключу uniqueID.Одна таблица содержит вещи, которые выглядят дублированными (tblDupes), другая - таблицу фактов (tblVouchers).В приведенном ниже запросе моя «сумма» работает, а FirstorDefault - нет.Он возвращает ошибку «не может неявно преобразовать тип« string »в« bool ».

var dupeGroups = from d in db.tblDupes
                           group d by d.dupeGroup into g
                           select new 
                           { 
                               Group = g.Key, 
                               TotalVal = g.Sum(v => v.tblVoucher.TransactionAmtDecimal),
                               Vendor = g.FirstOrDefault(x => x.tblVoucher.vendorName)
                            };

Есть идеи?Я пробовал много разных перестановок FirstOrDefault, ставил его в конце и т. Д. И т. Д. Я также пробовал First ().

Спасибо!

Ответы [ 2 ]

3 голосов
/ 08 февраля 2011

FirstOrDefault принимает предикат, что означает Func<T, bool>. Тем не менее, вы передаете, x => x.tblVoucher.vendorName, Func<T, string>, поскольку vendorName является строкой. Результат bool указывает на первую строку, которая соответствует. Например, чтобы найти первую строку с vendorName, равным "foo", вы должны передать x => x.tblVoucher.vendorName == "foo".

2 голосов
/ 08 февраля 2011

Я думаю, что параметр FirstOrDefault является предикатом, используемым для фильтрации. Вы хотите сначала выбрать поле, которое хотите получить, а затем получить первый результат (метки) следующим образом:

var dupeGroups = from d in db.tblDupes
                 group d by d.dupeGroup into g
                 select new { 
                     Group = g.Key, 
                     TotalVal = g.Sum(v => v.tblVoucher.TransactionAmtDecimal),
                     Vendor = g.Select(x => x.tblVoucher.vendorName).FirstOrDefault()
                 };

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...