LINQ Group By с несколькими параметрами
У меня есть приложение VB.NET и вы хотите сделать Group By на нескольких столбцах.
Структура класса:
Public Class Person
Public Property Name as String
Public Property City as String
Public Property Country as String
End Class
Dim oResult = PersonList _
.GroupBy(Function(v) New With {v.City, v.Country}) _
.Where(Function(grp) grp.Count > 1).ToList()
У меня есть записи нескольких человек, которые содержат одинаковое название города и название страны. Но выше запрос возвращает мне нулевые элементы. если я использую только один столбец Город или Страна, тогда он работает нормально.
Dim oResult = PersonList _
.GroupBy(Function(v) v.City) _
.Where(Function(grp) grp.Count > 1).ToList()
Кто-нибудь укажет мне, где я ошибаюсь, с запросом Group By LINQ с несколькими параметрами.
Ответы
Ответ 1
Проблема заключается в том, что только свойства Key
в анонимных типах используются в равенстве и хэшировании в VB. (Все свойства в анонимных типах С# являются фактически ключевыми свойствами.) Поэтому вам просто нужно изменить свой запрос на:
Dim oResult = PersonList _
.GroupBy(Function(v) New With { Key v.City, Key v.Country}) _
.Where(Function(grp) grp.Count > 1).ToList()
Подробнее см. документацию для анонимных типов в VB.
Ответ 2
Dim q1 = (From p In Repository.Table
Group p By p.CreatedDate.Year, p.CreatedDate.Month Into Group
Select New With {.Year = Year, .Month = Month, .Count = Group.Count()}).ToList
или
Dim q2 = (From p In Repository.Table
Group p By key = New With {.Year = p.CreatedDate.Year, .Month = p.CreatedDate.Month} Into Group
Select New With {.Year = key.Year, .Month = key.Month, .Count = Group.Count()}).ToList