2011-05-02 49 views
1

我怎么能这种方法转换为表达我可以在使用LINQ到实体:转换为表达

public bool IsMatch(long additionId) 
    { 
     return AdditionsPrices.Any(x => x.AdditionId == additionId); 
    } 

谢谢!

+0

欢迎光临。问题是什么? – BrunoLM 2011-05-02 02:59:30

+0

@BrunoLM:我不知道如何将此方法转换为可以在linq上执行到实体框架查询中的实体的表达式。 – Naor 2011-05-02 03:00:33

回答

3

这就是:

List<long> additionIds = AdditionsPrices.Select(x => x.AdditionId) 
             .ToList(); 

,然后在EF Contains()查询使用解决方案:

public Expression<Func<Addition, bool>> IsMatch(long additionId) 
    { 
     return a => a.AdditionsPrices.Any(x => x.AdditionId == additionId); 
    } 
0

为什么你不只是做了一个contains()查询,而不是 - 提取List<long>AdditionsPrices

var results = context.SomeEntitySet 
        .Where(x => additionIds.Contains(x.AdditionId)); 
+0

我打算写一个使用IsMatch方法的查询。但我总是得到这样的例外,即实体不能识别该方法。所以我想创建一个返回表达式的新的IsMatch方法。你可以在这里看到更多关于我的问题:http://stackoverflow.com/q/5845993/289246 – Naor 2011-05-02 03:06:50

+0

这将需要在你的情况下将非基元类型('AdditionsPrices')的列表转移到SQL - 我不'我认为这是行得通的 - 当然我可能是错的。 – BrokenGlass 2011-05-02 03:10:44

+0

所以你告诉有没有办法解决在.NET 4.0中的这个问题? – Naor 2011-05-02 03:17:27