【问题标题】:Convert to expression转换为表达式
【发布时间】:2011-05-02 02:55:45
【问题描述】:

如何将此方法转换为可以在 linq 中使用的表达式:

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

谢谢!

【问题讨论】:

  • 欢迎。有什么问题?
  • @BrunoLM:我不知道如何将此方法转换为可以在 linq 上执行的表达式,以查询实体框架。

标签: c# .net entity-framework linq-to-entities


【解决方案1】:

这是解决方案:

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

【讨论】:

    【解决方案2】:

    您为什么不直接执行 Contains() 查询 - 从 AdditionsPrices 中提取 List&lt;long&gt;

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

    然后在 EF Contains() 查询中使用它:

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

    【讨论】:

    • 我将编写一个使用 IsMatch 方法的查询。但我总是遇到 linq to entity 无法识别该方法的例外情况。所以我想创建一个返回表达式的新 IsMatch 方法。你可以在这里看到更多关于我的问题:stackoverflow.com/q/5845993/289246
    • 这将需要在您的情况下将非原始类型 (AdditionsPrices) 的列表传输到 SQL - 我认为这不会起作用 - 当然我可能是错的。
    • 所以你说没有办法在 .NET 4.0 中解决这个问题?
    • @Naor:考虑到您需要的表达式的依赖性和复杂性,我并不知道 - 我根本不知道任何可以为您提供所需内容的 SQL 映射。
    猜你喜欢
    • 2013-09-07
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    相关资源
    最近更新 更多