2017-05-04 34 views
3

我有一个ID列表为“100,1025,5341”和一个对象列表。我想获取不包含在我的对象列表中的ID。Linq - 使用linq在列表中获取不可用的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。

+0

@elgonzo我可以得到只有“1025”(根据我的例子)作为结果? – user2837480

+1

用Linq查询你的idList,而不是objectList。 (objectList没有id为1025的项目,因此查询objectList将永远不会给你1025,因为它不在其中...)首先将idList字符串转换为数组/列表。使用'.Where'代替'.Any'(请阅读MSDN文档以找出原因) – elgonzo

回答

2

使用Except

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

如果你想只有那些不在你的对象列表中包含的ID,那么你可以从idList做以下

var ids= idList.Split(',').Select(int.Parse); 
var r= ids.Except(ids.Where(i=> objectList.Any(item=> item.ID==i))); 
+0

当我看到您的更新时,我删除了我的评论:) – elgonzo

+0

@octavioccl谢谢:) – user2837480

+0

不客气@ user2837480;) – octavioccl

1

这将让你的IDS哪个不是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(); 
+0

是,我在这里犯了一个错误。感谢您的回复:) – user2837480

+0

只要它有帮助;) –