将列表<string>传递给Linq

时间:2017-12-07 19:01:16

标签: c# linq

第一个查询返回一个字符串列表,我将它们传递到另一个表中以查找相应的项目,但没有任何反应。没有错误信息或没有

var classIds = _contextSpecRepo.Get(x => x.cId.Equals(cId)).Select(x => x.classNames).Distinct().ToList();
// issue happens in the following query
var classes= Repository.Get(x => x.Id.Equals(classIds)).ToList();

3 个答案:

答案 0 :(得分:4)

Equals的调用(object)隐藏了问题:您正在将单个IdId列表进行比较,而不是检查是否Id存在于集合中。这会编译,但不会产生任何结果。

以下是解决问题的方法:

var classes= Repository.Get(x => classIds.Any(y => y == x.Id)).ToList();

var classes= Repository.Get(x => classIds.Contains(x.Id)).ToList();

答案 1 :(得分:3)

如果您必须在2个查询中执行此操作,则必须使用contains

var classes= Repository.Get(x => classIds.Contains(x.Id)).ToList();

更好的解决方案是在表格上使用连接。

答案 2 :(得分:1)

你也可以跳过.ToList()

var classes= Repository.Get(x => classIds.Contains(x.Id));