Невозможно назначить void неявной типизированной локальной переменной
var query = rep.GetIp() // in this line i have the error
.Where(x => x.CITY == CITY)
.GroupBy(y => o.Fam)
.Select(z => new IpDTO
{
IId = z.Key.Id,
IP = z.Select(x => x.IP).Distinct()
})
.ToList().ForEach(IpObj => IpObj.IP.ToList().ForEach(ip => PAINTIP(ip)));
Когда я запускаю этот код, у меня есть ошибка:
Невозможно присвоить void неявной типизированной локальной переменной
Я googled и обнаружил, что это проблема типа, потому что foreach
не является функцией LINQ? Я не могу понять, где находится void
!
Ответы
Ответ 1
так:
List<X> x = ...Select(x => x).ToList(); // List<T>
или
x.ForEach(x => x); // void
потому что вы не можете назначить void
на List<T>
.
var query = rep.GetIp() // in this line i have the error
.Where(x => x.CITY == CITY)
.GroupBy(y => o.Fam)
.Select(z => new IpDTO
{
IId = z.Key.Id,
IP = z.Select(x => x.IP).Distinct()
});
foreach (var dto in query)
{
foreach (var ip in dto.IP)
{
PAINTIP(ip);
}
}
или
var query = ....
.SelectMany(z => z.Select(x => x.IP).Distinct());
foreach (var ip in query)
{
PAINTIP(ip);
}
Ответ 2
ForEach()
ничего не возвращает. Его тип недействителен.
Попробуйте заменить вызовы ForEach() Выбрать().
Ответ 3
Я видел ваши другие вопросы, в которых вы задали аналогичный вопрос для одного и того же запроса. Код частично выглядит следующим образом:
var Q = rep.GetIp()
.Where(x => x.CITY == CITY)
.GroupBy(y => o.Fam)
.Select(z => new IpDTO
{
IId = z.Key.Id,
IP = z.Select(x => x.IP).Distinct()
});
Похоже, вы использовали ответ как таковой, и вы пытаетесь присвоить возвращаемое значение из запроса переменной "Q". Проверьте предыдущий пост: синтаксис в LINQ IEnumerable <string>
Как говорили другие, тип возврата forEach является "void". Вы должны называть "ForEach", как только переменная "Q" инициализируется коллекцией.