ASP.NET C# MVC中如何用LINQ实现Where In查询?
实现LINQ的Where In查询当然可行!
你已经掌握了单值的Where查询,要实现类似SQL里IN的逻辑其实很简单,只需要把原来的等于判断换成Contains方法就行——你的思路方向是对的,只是写法需要调整。
错误写法的问题
你原来写的m.value == values是把单个数值和整个数组做比较,这在语法上就不成立,编译器也会报错,因为类型不匹配(单个int vs int[])。
正确的实现方式
直接使用数组的Contains方法,LINQ to Entities会自动把这个逻辑转换成SQL的IN子句,完美匹配你的需求:
public ActionResult Index() { // 定义要匹配的数值数组 int[] values = {1, 2, 3, ...}; using (DBEntities db = new DBEntities()) { // 使用Contains实现Where In逻辑 var filteredData = db.vw_values.Where(m => values.Contains(m.value)).ToList(); return View(filteredData); } }
这段代码最终生成的SQL会是类似这样的:
SELECT * FROM vw_values WHERE value IN (1, 2, 3, ...)
额外的小提示
如果你的values数组有可能是空的,要注意:空数组的Contains会永远返回false,导致查询结果为空。如果需要这种情况返回所有数据,可以加个简单的判断:
public ActionResult Index() { int[] values = {1, 2, 3, ...}; using (DBEntities db = new DBEntities()) { var query = db.vw_values.AsQueryable(); // 只有当数组非空时才添加Where条件 if (values.Length > 0) { query = query.Where(m => values.Contains(m.value)); } var result = query.ToList(); return View(result); } }
这样就能灵活处理空数组的场景啦。
内容的提问来源于stack exchange,提问作者Jorge López
相关产品推荐
相关产品推荐

