无法将void分配给隐式类型的局部变量

Tan*_*990 14 c# linq linq-to-entities entity-framework compiler-errors

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)));
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我有错误:

无法将void分配给隐式类型的局部变量

我用Google搜索并发现它是一个类型问题,因为foreach它不是LINQ函数?我无法理解它在哪里void!

aba*_*hev 13

  • ForEach()有类型void.

  • Select()退货IEnumerable<T>,ToList()退货List<T>

所以:

List<X> x = ...Select(x => x).ToList(); // List<T>
Run Code Online (Sandbox Code Playgroud)

要么

x.ForEach(x => x); // void
Run Code Online (Sandbox Code Playgroud)

因为你不能分配voidList<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);
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

var query = ....
           .SelectMany(z => z.Select(x => x.IP).Distinct());

foreach (var ip in query)
{
    PAINTIP(ip);
}
Run Code Online (Sandbox Code Playgroud)


jru*_*ell 7

ForEach()没有任何回报.它的类型是无效的.

尝试使用Select()替换ForEach()调用.