在稍后的EF中,我try 传入一个匿名函数作为Linq查询的一部分.该函数将传入一个int并返回一个BOOL(u.RelationTypeId是一个int).下面是我的函数的简化版本:

public IEnumerable<UserBandRelation> GetBandRelationsByUser(Func<int, bool> relation)
{
    using (var ctx = new OpenGroovesEntities())
    {
        Expression<Func<UsersBand, bool>> predicate = (u) => relation(u.RelationTypeId);

        var relations = ctx.UsersBands.Where(predicate);

        // mapping, other stuff, back to business layer
        return relations.ToList();
    }
}

然而,我得到了上面提到的错误.通过从函数中构建一个谓词,我似乎可以纠正所有问题.有什么 idea 吗?谢谢

推荐答案

您正在try 将任意.NET函数传递到.实体框架怎么可能希望将其转换成SQL呢?您可以将其更改为Expression<Func<int, bool>>,并在此基础上构建Where子句,尽管particularly并非易事,因为您需要用不同的参数表达式重写表达式(即用调用u.RelationTypeId的表达式替换原始表达式树中的任何参数表达式).

老实说,为了在lambda表达式中指定u.RelationTypeId(用于创建表达式树以传递到方法中),最好只使用:

public IEnumerable<UserBandRelation> GetBandRelationsByUser(
    Expression<Func<UsersBand, bool>> predicate)
{
    using (var ctx = new OpenGroovesEntities())
    {
        var relations = ctx.UsersBands.Where(predicate);

        // mapping, other stuff, back to business layer
        return relations.ToList();
    }
}

Asp.net相关问答推荐

实体框架核心:DBCommand执行得更快,但总时间要慢10倍

在这个 For 循环计数没有增加

如何在 ASP.​NET Core 中使用 jquery

如何在 ASP.NET 中以 'YYYY-MM-DD' 格式获取当前日期?

如何在页面加载之前运行 JavaScript 代码?

如何在 Kendo UI 中获取下拉列表中选定项目的文本?

在属性中实现逻辑是一种好习惯吗

N' 在 SQL 脚本中代表什么? (插入脚本中字符之前使用的那个)

每月的每一天

如何配置 ASP.NET Core 1.0 以使用本地 IIS 而不是 IIS Express?

最佳服务器端 .NET PDF 编辑库

哪些行为驱动开发 (BDD) 工具/框架可用于 Microsoft Stack?

如何从 Asp.net Mvc-3 发送邮箱?

修改 web.config 时如何防止 ASP.NET 应用程序重新启动?

如何获取正在访问 ASP.NET 应用程序的当前用户?

有条件地排除 ASP.NET WebForms 中的一个 html 块

导航到本地 IIS Express 时,Chrome 会返回错误请求 - 请求太长

VS 2010 中缺少 App_Code 文件夹

调查 Web.Config 重复部分原因的步骤

ASP.NET MVC 和 httpRuntime executionTimeout