2

我希望我正确地命名了这个问题,并且我可以正确解释我的意思。我有一个从数据库填充的 ViewModel 的列表<>,在我的控制器中,我试图通过项目的属性值之一访问该列表的特定单个项目并更改另一个属性值。

例如,我的模型可能有几个属性:

    public int Id { get; set; }
    public bool IsChanged { get; set; }

我想通过'Id'访问它并像这样更改'IsChanged'属性(我在我不确定的部分周围使用#'s)

    list.#(select item in the list by it's Id)#.IsChanged = true;

我希望这是有道理的,即使您可能有一个很好的教程链接,谢谢:-)

4

2 回答 2

3

如果我理解正确,如果没有匹配项, usingSingle会导致 null 错误,我宁愿使用SingleOrDefault如果没有匹配项会返回 null 的 a ......这可能是一种安全的方法:

if(list != null)
{
  var item = list.SingleOrDefault(x => x.Id == 1);
  if(item !=null)
  {
    item.IsChanged = true;
  }
  else
  {
   // code to handle this case
  }
}
else
{
  // code to handle this case
}

这是迄今为止我读过的关于 LINQ 的最好的书... LINQ to Objects Using C# 4.0

干杯...

于 2012-04-06T22:04:35.793 回答
2
list.Single(x => x.Id == 123).IsChanged = true;

Single() 方法期望只有一个满足查询的项目,因此您需要确保您的 Id 是唯一的。

如果没有项目满足查询,ArgumentNullException则会抛出 an。如果有多个项目满足查询,InvalidOperationException则会抛出 an。

如果您尝试访问的属性是引用类型,您可能需要额外检查以确保它已被实例化。

于 2012-04-06T21:52:21.180 回答