当我们使用FirstOrDefault(x =>x.Id == obtId || x.Id == pagId)计算哪个条
本文关键字:Id pagId 计算 我们 FirstOrDefault obtId | 更新日期: 2023-09-27 18:07:03
我有一个文件,其中有项目列表,每个项目有一个"Id"。我的应用程序正在寻找一个Id,它在文件中寻找这个Id。id可以是以下两个id中的一个-> obtId
或pagId
。
例如:我有obtId=94
和pagId=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
它的计算方式与循环中的常规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页面