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
的位置!
答案 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)
答案 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”。