如何解决LINQ to Entities无法识别方法' System.String ToString()'方法?

时间:2016-01-11 06:44:28

标签: c# linq

我已检查过与此相关的所有示例,但未能解决我的问题。

我创建了复选框,如果我以前取消选中则意味着获取一些值

返回

string selectedid = {"2","6","45","34","5"};  
string[] separteid = Regex.Split(selectedid, ",");

List<string>idlist=new List<string>();
foreach(var item in separteid)
{
     idlist.Add(item);
}   

我想检查数据库表的整数ID

job = (from n in bc.db.xx where idlist.Contains(n.id.ToString()) select n);
ViewBag.Count = job.Count(); 

如何解决?有人帮忙吗?

3 个答案:

答案 0 :(得分:3)

如果使用的EF版本是4或更高版本,您可以使用以下内容。请查看this了解更多信息。

SqlFunctions.StringConvert((Decimal)n.id).Trim(),

或者您可以将您的字符串列表转换为int列表,如下所示,并使用.Contains。

job = (from n in bc.db.xx where idlist.Select(x=>int.Parse(x)).Contains(n.id) select n);

答案 1 :(得分:2)

如果typeof (n.id) == System.String,只需删除ToString()调用即可。如果类型是int,或者可以隐式转换为int,则转换列表:

string[] strIds = new[] {"1", "2", "3"}; // I assume you get these values from somewhere else
var idlist = strIds.Select(int.Parse);
var job = (from n in bc.db.xx
           where idlist.Contains(n.id.ToString())
           select n);

答案 2 :(得分:2)

你的情况非常好,因为你在数据库端与整数进行比较将是在C#端传递整数而不是传递字符串并尝试在另一端进行转换

问题在于,您的大多数代码都没有意义,您正在使用列表语法创建一个字符串(我甚至惊讶于编译)。然后通过拆分将它变成一个数组,然后从该数组生成一个列表,所有这一切都可以在一个步骤中完成,或者更好,你甚至可以声明为int列表,开始替换所有这些:< / p>

string selectedid = {"2","6","45","34","5"};  
string[] separteid = Regex.Split(selectedid, ",");

List<string>idlist=new List<string>();
foreach(var item in separteid)
{
     idlist.Add(item);
} 

用这个:

List<int> idlist = new List<int>(){2,6,45,34,5};

然后你已经有了正确的类型,可以简化这个:

job = (from n in bc.db.xx where idlist.Contains(n.id.ToString()) select n);
ViewBag.Count = job.Count(); 

对此:

ViewBag.Count = (from n in bc.db.xx where idlist.Contains(n.id) select n)
    .Count();

或者,如果您不介意lambda语法,您可以直接将谓词传递给count:

ViewBag.Count = bc.db.xx
    .Count(n=>idlist.Countains(n.id));