c# - 试图在 linq 语句的位置调用方法

标签 c# .net linq linq-to-sql

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

Method 'Boolean isUser(System.String)' has no supported translation to SQL.

有什么帮助吗?顺便说一句,我正在使用 linq to 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;
}

我找到了一个将第一个查询的结果作为对象查询的解决方案,但这是一个很好的理由,我将两次传递我的数据。


按照 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();
        }
    }

最佳答案

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

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

您可以使用 SqlMethods.Like() 来检查字段是否只包含数字。参见 T-SQL IsNumeric() and Linq-to-SQL举个例子。

关于c# - 试图在 linq 语句的位置调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8816691/

相关文章:

c# - Windows 窗体中的控件不显示工具提示气球

c# - 字符串操作。在 2 个索引之间查找字符串

c# - 调试器监 window 口中的 VS2015 LINQ

c# - 在 Entity Framework 中的 Groupby 中获取(限制)列表

c# - 从 GridView C# 中的 DataRow 获取原始对象

c# - 如何在连接字符串中设置用户名和密码以连接到数据库?

c# - 'Enum : Type' 和简单的 'Enum' 有什么区别

c# - .net TransactionScope 异常

c# - 更高效的半正弦函数

.net - 跨 DMZ 的代理调用