Foreach循环到linq

时间:2013-06-14 16:23:10

标签: linq foreach

这可能非常简单,但转换后我无法看到数据

public void SearchGrid(int id, ObservableCollection<TestModel> msgField)
{ 
  foreach (var c in msgField)
    DisplayColor = c.Id == id ? Brushes.Blue : Brushes.Black;
}

的LINQ:

Enumerable.FirstOrDefault(msgField.Where(x => x.Id == id), x => { DisplayColor = Brushes.CadetBlue; });

1 个答案:

答案 0 :(得分:5)

通常,创建产生副作用的查询是个坏主意。我个人会将其重写为:

DisplayColor = msgField.Any(x => x.Id == id) ? Brushes.Blue : Brushes.Black;

这会产生我相信你试图生成的输出。它会根据是否存在匹配的“msgField”元素将DisplayColor设置为蓝色或黑色。

要获得与当前循环代码相同的结果,可以使用:

if (msgField.Any())
    DisplayColor = msgField.Last().Id == id ? Brushes.Blue : Brushes.Black;

这将产生与循环相同的输出,因为循环将在每次迭代时覆盖DisplayColor,因此只有最后一项才重要。