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

时间:2011-11-23 13:15:19

标签: c# linq entity-framework linq-to-entities 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)));

当我运行此代码时出现错误:

  

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

我用Google搜索并发现这是一个类型问题,因为foreach不是LINQ函数?我无法理解void的位置!

3 个答案:

答案 0 :(得分:11)

  • ForEach()的类型为void

  • Select()返回IEnumerable<T>ToList()返回List<T>等。

这样:

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);
}

答案 1 :(得分:7)

ForEach()不会返回任何内容。它的类型是无效的。

尝试使用ForEach()替换Select()来电。

答案 2 :(得分:1)

我看到了您的其他问题,其中您针对同一查询提出了类似问题。代码部分如下所示:

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”。查看您之前的帖子:syntax in LINQ IEnumerable<string>

正如其他人所说,ForEach的返回类型是“无效”。一旦用集合初始化变量“Q”,就应该调用“ForEach”。