GroupBy работает не корректно в IQueryable

138
21 июля 2019, 01:20

Работаю с Entity Framework. Есть класс

   class Entity
{
    public string Name { get; set; }
    public bool IsMain { get; set; }
}

Получаю данные из БД c использованием GroupBy:

var grouppedEntitiesByName = context.GetEntities<Entity>().GroupBy(en => en.Name);

В БД есть такие данные :

IsMain = true, Name = "entity"  
IsMain = false, Name = "entity"
IsMain = true, Name = "Entity" 

После я делаю так:

 foreach (var entity in grouppedEntitiesByName)
        {
            var mainEntity = entity.Single(a => a.IsMain);
        }

Здесь получаю ошибку Sequence contains more than one matching element. Дело в том что GroupBy дает три элемента, кажется он не различает маленькие и большие буква. После я использовал ToList:

var grouppedEntitiesByName = context.GetEntities<Entity>().ToList().GroupBy(en => en.Name);

Всё работает. Но почему это не работает с IQueryable. Есть ли какое то решение данной проблемы?

Answer 1

Попробуйте использовать FirstOrDefault вместо Single, так:

var mainEntity = entity.FirstOrDefault(a => a.IsMain);
if(mainEntity != null)
{ ... }

Single: выбирает единственный элемент коллекции, если коллекция содердит больше или меньше одного элемента, то генерируется исключение

READ ALSO
Вызов алерта после редиректа

Вызов алерта после редиректа

У меня есть форма на которой выполняется ajax запрос, в итоге выполнения происходит перенаправление на другую страницу$(location)

230
C# прокси сервер авторизация

C# прокси сервер авторизация

в приложение есть форма где заполняется хост,порт, логин и пароль

185
Запись данных PHP в файл txt

Запись данных PHP в файл txt

Есть чекбоксы (их порядка 50 штук), которые передают данные в php файл, и эти данные нужно сохранить, я что то наковырял, и получается что после...

150
Выборка из двух таблиц с суммированием столбца

Выборка из двух таблиц с суммированием столбца

Есть таблица clients и transactionsВ обеих таблицах есть столбец client_id

128