Я пытаюсь заставить этот LINQ работать, но не с ошибкой.Ошибка LINQ с GroupBy
Невозможно преобразовать лямбда-выражения к типу «System.Collections.Generic.IEqualityComparer», потому что это не тип делегата
В основном я IEnumerable<DataRow>
, и я стараюсь, чтобы сгруппировать данные, как и в :
string sql = @"SELECT [t0].[Contact_Account] AS [Contact], [t0].[Work_Phone] AS [WorkPhone], [t0].[SR_NUM] AS [SRNum] ";
sql += "FROM [Base_SR] AS [t0] ";
sql += "WHERE ([t0].[Country] = 'USA') AND (NOT ([t0].[Work_Phone] LIKE '+%')) ";
sql += "AND ([t0].[Product] = 'SP3D') AND (DATEPART(Year, [t0].[DateOpened]) = {0})";
sql = String.Format(sql, curYear);
var sqlCmd = new SqlCommand(sql, new SqlConnection(connectionString));
var adapter = new SqlDataAdapter(sqlCmd);
var dataSet = new DataSet();
adapter.Fill(dataSet);
var siebelRows = dataSet.Tables[0].AsEnumerable();
return siebelRows.GroupBy(sr => new { AreaCode = sr.Field<string>("WorkPhone").Substring(0, 3),
Contact = sr.Field<string>("Contact") },
(key, lst) => new Customer
{
Id = Guid.NewGuid(),
AreaCode = key.AreaCode,
CustAccount = key.Contact,
FirstPhoneNo = lst.First().Field<string>("WorkPhone").Substring(0, 10),
FirstSRNum= lst.First().Field<string>("SRNum"),
SRCount = lst.Count()
})
.Take(5);
Любые мысли?
предложение DigEmAll помогли (спасибо), и я должен был сделать это:
public class GroupKey
{
public string AreaCode { get; set; }
public string Contact { get; set; }
}
А затем изменить LINQ к этому GroupBy
ключ:
GroupBy<DataRow, GroupKey, IEnumerable<Customer>>
return siebelRows.GroupBy<DataRow, GroupKey, IEnumerable<Customer>>(sr => new GroupKey
{
Contact = sr.Field<string>("Contact"),
AreaCode = sr.Field<string>("WorkPhone").Substring(0, 3)
},
(key, lst) => new Customer
{
Id = Guid.NewGuid(),
AreaCode = key.AreaCode,
CustAccount = key.Contact,
FirstPhoneNo = lst.First().Field<string>("WorkPhone").Substring(0, 10),
FirstSRNum = lst.First().Field<string>("SRNum"),
SRCount = lst.Count()
}).OrderByDescending(c => c.SRCount)
.Take(5);
Не нравится создавая конкретный тип для ключа ... каким-то образом вокруг этого?
Похоже, LINQ ищу 2-ой перегрузки что требует публичного статического IEqualityComparer IEnumerable> GroupBy ( это IEnumerable источник, Func keySelector, IEqualityComparer Comparer); –
Sunit