试图在一个linq语句的位置调用一个方法

She*_*wzy 8 .net c# linq linq-to-sql

下面是我正在使用的代码,但它回复了

方法'Boolean isUser(System.String)'没有支持的SQL转换.

有帮助吗?顺便说一句,我正在使用linq到SQL数据源

public void dataBind()
{
    using (var gp = new GreatPlainsDataContext())
    {
        var emp = from x in gp.Employees
                  let k = isUser(x.ID)
                  where x.ActivtyStatus == 0
                  && isUser(x.ID) != false
                  orderby x.ID
                  select new
                  {
                      ID = x.ID,
                      Name = x.FirstName + " " + x.MiddleName
                  };
        ListView1.DataSource = emp;
        ListView1.DataBind();
    }
}

public static bool isUser(string ID)
{
    int temp;
    bool x = int.TryParse(ID, out temp);
    return x;
}
Run Code Online (Sandbox Code Playgroud)

我找到了一个解决方案来查询第一个查询的结果作为对象,但这是一个很好的原因,我将通过我的数据两次.


根据Anders Abel的建议使用之后最终工作的更新代码

public void dataBind()
    {
        using (var gp = new GreatPlainsDataContext())
        {
            var emp = from x in gp.Employees
                      where x.ActivtyStatus == 0
                      && SqlMethods.Like(x.ID, "[0-9]%")
                      orderby x.ID
                      select new
                      {
                          ID = x.ID,
                          Name = x.FirstName + " " + x.MiddleName
                      };
            ListView1.DataSource = emp;
            ListView1.DataBind();
        }
    }
Run Code Online (Sandbox Code Playgroud)

And*_*bel 6

Linq-to-sql将查询转换为SQL.它只知道如何翻译一组有限的内置函数.您必须重写您的查询以不包括您自己的功能.

可以在MSDN上找到linq-to-sql支持的函数和运算符的完整列表.

您可以SqlMethods.Like()用来检查该字段是否只包含数字.有关示例,请参阅T-SQL IsNumeric()和Linq-to-SQL.