当我们使用FirstOrDefault(x =>x.Id == obtId || x.Id == pagId)计算哪个条

本文关键字:Id pagId 计算 我们 FirstOrDefault obtId | 更新日期: 2023-09-27 18:07:03

我有一个文件,其中有项目列表,每个项目有一个"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

当我们使用FirstOrDefault(x =>x.Id == obtId || x.Id == pagId)计算哪个条

的问题

它的计算方式与循环中的常规if语句一样。返回的项将是其中一个或两个表达式的条件求值为真的第一个项。如果条件不为真,则返回默认值。

你可以使用下一个代码:

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);
  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;
  }

计算第一个,如果为真,则结果为真。如果不是,则计算第二个,如果为真,则结果为真。如果不是,结果为false。

以下是||操作符的MSDN页面