2015-04-08 41 views
0

我有以下无法做到正确相交

var deptRecs= DepartmentRecords; //it is of type IEnumerable<Department> 
var deptIDs= new string[] { "1", "2" }; 
var result = deptIDs.Intersect(?????) 

我想弄清楚共同的部门ID的。 Intersect的谓词中会包含什么?

+0

所以你想在'deptIDs'中把所有具有'Id'的Department对象?对, – tchrikch

+0

是的,那是真的 –

回答

1

Enumerable.Intersect预计的相同类型的参数来过滤。因此,为了执行一组交叉点,因为你正在试图在串的阵列,以通过,一个示例可以是

DepartmentRecords.Select(i=>i.DepartmentName).Intersect(deptIDs); 

我假设你有字符串类型的DepartmentName属性。执行选择操作将返回IEnumerable<string>。然后我传入数组,这将返回两个枚举集的交集。

2

您可以使用WhereContains代替Intersect

var result = deptRecs.Where(x => deptIDs.Contains(x.Id)).ToList(); 
3

使用以下,而不是交集:

deptRecs.Where(d=>deptIDs.Contains(d.DeptId)) 

对于相交,你需要同样类型的实体。

希望它有帮助...

谢谢。

2

假设int类型上DepartmentId属性是足以与Contains()操作

var result = deptRecs.Where(r=>deptIDs.Contains(r.Id.ToString()))