在Linq where子句中将int转换为字符串

时间:2011-06-15 10:36:43

标签: c# .net asp.net

我在linq查询中有一个'where'子句,我必须将int转换为字符串,我尝试在SO中读取类似的遇到但我仍然难以在我的方法中应用解决方案。这是抛出'System.Web.HttpUnhandledException'错误的行,感谢任何帮助:

|| (p.ProductID!= null&& p.ProductID.ToString()。Contains(s)):

  public void search(string s)
    {
        CommerceEntities db = new CommerceEntities();

            var products = from p in db.Products

                           where (p.ModelName != null && p.ModelName.Contains(s))
                           || (p.ProductID != null && p.ProductID.ToString().Contains(s))
                           || (p.ModelNumber != null && p.ModelNumber.Contains(s))
                           || (p.Description != null && p.Description.Contains(s))

                           select new
                           {
                               // Display the items 
                               ProductID = p.ProductID,
                               ProductImage = p.ProductImage,
                               UnitCost = p.UnitCost
                           };

            ListView_Products.DataSourceID = null;
            ListView_Products.DataSource = products;

    }

6 个答案:

答案 0 :(得分:6)

在EF中,int没有重载,所以你需要强制转换为double或小数。您必须使用SqlFunctions.StringConvert

像这样:

        p.ProductID != null &&  SqlFunctions.StringConvert((double)p.ProductID).Contains(s)

答案 1 :(得分:0)

它抛出了异常,因为在第一行的末尾你关闭了where方法。你错过了(将这些行组合在一起。

where ((p.ModelName != null && p.ModelName.Contains(s)) ||
       (p.ProductID != null && p.ProductID.ToString().Contains(s)) || 
       (p.ModelNumber != null && p.ModelNumber.Contains(s)) ||
       (p.Description != null && p.Description.Contains(s)))

答案 2 :(得分:0)

如果您使用Linq to Entities,则无法在查询表达式中使用C#方法。 如果它是Linq to Sql,它将起作用。

答案 3 :(得分:0)

初始化整数变量转换字符串s而不是使用
     p.ProductID ==(intval))

意味着您的代码将是这样的

public void search(string s)
{
    CommerceEntities db = new CommerceEntities();
     int val = Convert.ToInt32(s);
    IQueryable<Product> product = db.Products ;
        var products = from p in db.Products

                       where (p.ModelName != null && p.ModelName.Contains(s))
                       || (p.ProductID != null && p.ProductID == val)
                       || (p.ModelNumber != null && p.ModelNumber.Contains(s))
                       || (p.Description != null && p.Description.Contains(s))

                       select new
                       {
                           // Display the items 
                           ProductID = p.ProductID,
                           ProductImage = p.ProductImage,
                           UnitCost = p.UnitCost
                       };

        ListView_Products.DataSourceID = null;
        ListView_Products.DataSource = products;

}

答案 4 :(得分:0)

仍然在DB中评估查询的下降解决方法如下:

Convert.ToString(p.ProductID).Contains(s)

答案 5 :(得分:-1)

您无法在Entity Framework Linq查询中使用.ToString()方法。