powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проекция данных с подсчетом количества
4 сообщений из 4, страница 1 из 1
Проекция данных с подсчетом количества
    #36792614
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть накий массив элементов состоящих из дву полей:
Код: plaintext
1.
2.
3.
4.
public class Vendor
{
public Guid VendorID;
public string VendorName;
}
пусть это будет List<Vendor>() в котором есть несколько производителей, причем они могут повторяться несколько раз. Мне нужно получить проекцию:

Код: plaintext
1.
2.
3.
4.
5.
public class VendorCount
{
public Guid VendorID;
public string VendorName;
public int Count;
}

в которой нет повторов по полям VendorID и VendorName и в поле Count содержится количество повторов в первоначальном массиве.

Как написать LINQ запросом?
...
Рейтинг: 0 / 0
Проекция данных с подсчетом количества
    #36792633
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать, я сделал таким запросом:

Код: plaintext
1.
2.
3.
4.
5.
6.
_filterVendors.Distinct().OrderBy(c => c.VendorName)
                    .Select(c => new
                    {
                      VendorID = c.VendorID,
                      VendorName = c.VendorName,
                      Count = _filterVendors.Count(p => p.VendorID.Equals(c.VendorID))
                    }); 

но это оказывается не очень эффективно. Нужно как-то сделать так, чтобы проекция собралась за один проход по первоначальному массиву
...
Рейтинг: 0 / 0
Проекция данных с подсчетом количества
    #36793264
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
навскидку
Код: plaintext
1.
2.
3.
4.
            var res = list.GroupBy(
                i => i.VendorID, //Func<TSource, TKey> keySelector
                (k, ls) => new VendorCount() { VendorID = k, VendorName = ls.First().VendorName, Count = ls.Count() } //Func<TKey, IEnumerable<TSource>, TResult> resultSelector
            );
либо "по-честному", в "ключевой" объект все нужные данные
Код: plaintext
1.
2.
3.
4.
            var res = list.GroupBy(
                i => Tuple.Create<Guid, string>(i.VendorID, i.VendorName), //Func<TSource, TKey> keySelector
                (k, ls) => new VendorCount() { VendorID = k.Item1, VendorName = k.Item2, Count = ls.Count() } //Func<TKey, IEnumerable<TSource>, TResult> resultSelector
            );
кстати, странно то, что сделать таким "ключевым" объектом Vendor не получилось, с override bool Equals
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
        public override bool Equals(object obj)
        {
            if (null == obj) {
                return false;
            }
            return this.VendorID == ((Vendor)obj).VendorID;
        }
в чем может быть причина?
...
Рейтинг: 0 / 0
Проекция данных с подсчетом количества
    #36795804
Datar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR, спасиба, про GroupBy как-то забыл.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Проекция данных с подсчетом количества
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]