LINQ 2 SQL查询不适用于函数调用

Art*_*his 3 c# linq-to-sql

我很确定这个问题已经被多次询问了,我再次提出要求,但我做了一些研究,不幸的是我没有在互联网上找到我的乐趣......

我有一个像这样的IQueryable:

triggers = triggers.Where(t => GetIdFromName(t.Name) == filter.Id.ToString());
Run Code Online (Sandbox Code Playgroud)

函数GetIdFromName获取名称的一部分以检索Id:

public string GetIdProfiloFromName(string name)
        {
            return name.Substring(name.IndexOf(NameFirstSeparator)+1,name.IndexOf(NameSecondSeparator)-name.IndexOf(NameFirstSeparator)-1);
        }
Run Code Online (Sandbox Code Playgroud)

我知道这不好,但它是迄今为止我能做到的最好的.我的问题是使用这两个语句不允许使用Linq to sql.应用程序抛出错误,但这没关系:

triggers = triggers.Where(t => t.Name.Substring(t.Name.IndexOf(NameFirstSeparator) + 1, t.Name.IndexOf(NameSecondSeparator) - t.Name.IndexOf(NameFirstSeparator) - 1) == filter.Id.ToString());
Run Code Online (Sandbox Code Playgroud)

我怀疑GetIdFromName函数应该给出一些不同于字符串的东西,但我真的很想知道是什么以及如何......

谢谢你的启发,

约恩

[编辑]到目前为止我所理解的更新:

我不能做我想做的事,因为为了做到这一点,我需要做一些这样的事情:

static Expression<Func<Trigger,string,  bool>> IsId = (a,b) => a.name.Substring(a.name.IndexOf(NameFirstSeparator) + 1, a.name.IndexOf(NameSecondSeparator) - a.name.IndexOf(NameFirstSeparator) - 1)==b;
Run Code Online (Sandbox Code Playgroud)

但这不会进入

triggers = triggers.Where(func<Trigger,bool>);
Run Code Online (Sandbox Code Playgroud)

我可以设法做到这一点,但我必须从我的数据库中获取所有结果才能在内存中执行我的测试.

非常感谢,你让我对此变得非常清楚!!

Dav*_*fer 5

LINQ 2 SQL将您的查询转换为表达式树,然后将该表达式树转换为SQL.由于您的自定义函数没有SQL相关函数,因此它不知道如何转换它并抛出异常.