我已检查过与此相关的所有示例,但未能解决我的问题。
我创建了复选框,如果我以前取消选中则意味着获取一些值
返回
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();
如何解决?有人帮忙吗?
答案 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));