当我们使用FirstOrDefault(x => x.Id == obtId || x.Id == pagId)时它会评估哪个条件

时间:2014-06-06 21:22:52

标签: c# xml linq

我有一个文件,其中包含项目列表,每个项目都有一个" Id"。 我的应用正在寻找一个ID,它在文件中查找此ID。 id可以是以下id中的两个 - >> obtIdpagId

例如:我obtId=94pagId=Dept都存在于文件中。 pagId=Dept最后是文件中的obtId=94。但我想为我的页面选择obtId,这是用户操作的准确ID。

在这种情况下,我的查询应该是什么? 如何确保根据obtId而不是pagId选择第一个元素?

Items.FirstOrDefault(x => x.Id == obtId || x.Id == pagId);

更新

 Items.FirstOrDefault(x => x.Id == obtId) ?? 
    Items.FirstOrDefault(x => x.Id == pagId);

这解决了我首先搜索obtId的问题,然后才搜索匹配的pagId

4 个答案:

答案 0 :(得分:2)

它作为循环中的常规if语句进行求值。返回的项将是条件为一个或两个表达式求值为true的第一个项。如果没有条件为true的项目,则返回默认值。

答案 1 :(得分:1)

您可以使用下一个代码:

var results = Items.Where(x => x.Id == objectId || x.Id == pageType).ToArray();
var result  = results.SingleOrDefault(x=>x.Id==objectId)??results.SingleOrDefault(x=>x.Id==pageType);

答案 2 :(得分:1)

  YourType FindMatchOrDefault(int objectId, int pageType)
  {
    YourType secondaryMatch = null;
    foreach (var x in Items)
    {
      if (x.Id == objectId)
        return x; // primary match, exit loop

      if (secondaryMatch == null && x.Id == pageType)
        secondaryMatch = x;
     }
     return secondaryMatch;
  }

答案 3 :(得分:0)

它评估第一个,如果为true,则结果为true。如果不是,则计算第二个,如果为true,则结果为true。如果没有,结果是错误的。

Here is the MSDN page on the || operator.