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。