C# FirstOrDefault似乎无法评估或设置条件

C# FirstOrDefault似乎无法评估或设置条件,c#,linq,xamarin.forms,C#,Linq,Xamarin.forms,我实际上面临着一个我真的不明白的问题。 情况非常简单: 我正在用Xamarin.Forms 4.1.0开发一个跨平台应用程序,我需要用Linq过滤observateCollection中的元素。 集合由具有相同类型的两个子元素(左和右)的元素组成。 下面是给我带来问题的代码部分: var element = MyCollection.FirstOrDefault(e => e.Left.Item.Id == searchId || e.Right.Item.Id == searchId);

我实际上面临着一个我真的不明白的问题。 情况非常简单:

我正在用
Xamarin.Forms 4.1.0
开发一个跨平台应用程序,我需要用
Linq
过滤
observateCollection
中的元素。 集合由具有相同类型的两个子元素(左和右)的元素组成。 下面是给我带来问题的代码部分:

var element = MyCollection.FirstOrDefault(e => e.Left.Item.Id == searchId || e.Right.Item.Id == searchId);
如果请求的id与左侧元素相同(因此在or条件中要计算的第一个id),则一切正常,但如果请求的id等于右侧元素的id,
FirstOrDefault
返回null,就像条件被第一条语句短路一样。我还尝试将操作分开,将条件放在Where函数中,放在
FirstOrDefault
之前,但没有任何变化

有什么建议吗?谢谢

编辑 对不起,这是更多的代码

class MyClass{
  ObservableCollection<MyItem> MyCollection {get; set;}

  public MyClass(List<MyItem> list){
     MyCollection = new ObservableCollection<MyItem>();
     MyCollection.ItemSource = list;
  }

  public void MyMethod(Guid searchId, string newName){
     var element = MyCollection.FirstOrDefault(e => e.Left.Item.Id == searchId || e.Right.Item.Id == searchId);
      //more code which is not relevant
     }


}

class MyItem{
public Item Left {get; set;}
public Item Right {get; set;}
}

class Item{
public Guid Id {get; set;}
public string Name {get; set;}
}
class-MyClass{
ObservableCollection MyCollection{get;set;}
公共MyClass(列表){
MyCollection=新的ObservableCollection();
MyCollection.ItemSource=列表;
}
public void MyMethod(Guid searchId,字符串newName){
var元素=MyCollection.FirstOrDefault(e=>e.Left.Item.Id==searchId | | e.Right.Item.Id==searchId);
//更多不相关的代码
}
}
类MyItem{
公共项左{get;set;}
公共项权限{get;set;}
}
类项目{
公共Guid Id{get;set;}
公共字符串名称{get;set;}
}

我想我已经找到了这个问题的原因

问题在于,xamarin.forms不能通过重建解决方案来正确地重新加载已部署的应用程序

FirstOrDefault中的lambda表达式最初仅为

e => e.Left.Item.Id == searchId
而不是

e => e.Left.Item.Id == searchId || e.Right.Item.Id == searchId
要解决此类问题,每次修改xaml或cs时,都必须重新生成整个解决方案(或仅重建涉及的项目),并从设备/仿真器中手动删除应用程序

这并不是每次都会发生,但我认为这是避免这些问题的必要实践


我希望这将帮助其他人

您需要添加更多代码。什么类型是
Id
?它与
searchId
的类型相同吗?短路不适用于OR语句,除非第一个表达式的计算结果为true-因此,如果第一个表达式为false,则将计算第二个表达式。您能否提供一个示例,因为您的解释没有意义。我添加了更多示例code@AnuViswan示例代码,刚刚以正确的可见性编辑,对不起,我们需要一个独立编译的系统,我们可以在我们的终端运行来重现这个问题。