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

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

我有一个像这样的IQueryable:

triggers = triggers.Where(t => GetIdFromName(t.Name) == filter.Id.ToString()); 

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

 public string GetIdProfiloFromName(string name) { return name.Substring(name.IndexOf(NameFirstSeparator)+1,name.IndexOf(NameSecondSeparator)-name.IndexOf(NameFirstSeparator)-1); } 

我知道这不好,但这是迄今为止我能做到的最好的事情。 我的问题是使用这两个语句不允许使用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()); 

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

谢谢你的启迪,

约恩

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

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

 static Expression<Func> IsId = (a,b) => a.name.Substring(a.name.IndexOf(NameFirstSeparator) + 1, a.name.IndexOf(NameSecondSeparator) - a.name.IndexOf(NameFirstSeparator) - 1)==b; 

但这不会进入

 triggers = triggers.Where(func); 

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

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

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