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を割り当てることはできません
グーグルで検索したところ、foreach
はLINQ関数ではないため、タイプの問題であることがわかりましたか? void
がどこにあるのかわかりません!
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);
}
_
私はあなたの他の質問を見ました、あなたは同じ質問に対して同様の質問をしました。コードは部分的に次のようになります:
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」です。変数「Q」がコレクションで初期化されたら、「ForEach」を呼び出す必要があります。