Linq - 使用Linq获取列表中不可用的ID

3
我有一个ID列表,格式为“100,1025,5341”,以及一个物体列表。我想获取不包含在我的物体列表中的ID。
例如,假设物体列表都包含100和5341作为属性(例如:ID),我想得到1025作为结果。我知道这个请求没有意义,但我希望在某种程度上得到它。我可以轻松地使用以下代码:
string idList = "100,1025,5341";
var objectList = _dataService.GetData();
var result = objectList.Any(item=> idList.Contains(item.ID));

要获取具有给定ID的列表项。但我想用其他方式得到。我想获取不存在于列表中的ID。


@elgonzo,根据我的示例,我能只得到“1025”作为结果吗? - user2837480
1
使用Linq查询您的idList,而不是objectList。 (objectList没有具有id 1025的项,因此查询objectList永远不会给您1025,因为它不在其中...)首先将idList字符串转换为数组/列表。使用.Where而不是.Any(阅读MSDN文档以找出原因)。 - user2819245
2个回答

3
使用Except
var ids= idList.Split(',').Select(int.Parse);
var result = objectList.Where(item=> ids.Contains(item.ID));
var r= objectList.Except(result);

如果您只想要那些不包含在对象列表中的ID,那么可以按照以下方式进行操作。
 var ids= idList.Split(',').Select(int.Parse);
 var r= ids.Except(ids.Where(i=> objectList.Any(item=> item.ID==i)));

@octavioccl 谢谢 :) - user2837480

1
它将从idList中获取不是objectList的Id。如果我理解你的意思正确的话...
var ids = objectList.Select(x=>x.ID).ToList();
var otherIdsList = idList.Split(',').Select(x=>int.Parse(x)).ToList().Where(x=> !ids.Contains(x)).ToList();

是的,我在这里犯了一个错误。谢谢您的回复 :) - user2837480
只要它有帮助 ;) - Mantas Čekanauskas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接