LINQ查询的NotSupportedException

时间:2015-03-18 01:13:18

标签: linq entity-framework

我正在尝试获取一个名为oracleTimeCards的数据库表的列表,该表的员工ID等于employees列表中的employeeID。这是我写的:

LandornetSQLEntities db = new LandornetSQLEntities();

List<OracleEmployee> employees = db.OracleEmployees.Where(e => e.Office.Contains(officeName) && e.IsActive == true).Distinct().ToList();

var oracleTimeCards = db.OracleTimecards.Where(c => employees.Any(e => c.PersonID == e.PersonID)).ToList();

任何人都有任何想法?

1 个答案:

答案 0 :(得分:1)

我假设你在这里使用Entity Framework。您不能在谓词中嵌入对任意LINQ扩展方法的调用,因为EF可能不知道如何将这些方法转换为SQL。

假设您要查找在第一个查询中找到的员工的所有时间卡,您有两种选择。最简单的是在Employee类上创建一个导航属性,名为let {'1}},指向给定员工的时间卡记录集合。这是如何工作的:

TimeCards

如果您因任何原因不想这样做,可以通过评估第一个查询来创建一个员工ID数组,并使用它来过滤第二个查询:

var oracleTimeCards = employees
    .SelectMany(e => e.TimeCards)
    .ToList();