如何解决LINQ使用OR进行多个条件选择
我要将列表传递给linq进行搜索
例如:
List<string> test = new List<string> {"a","b","c","d"}
var list = db.table.where(t => t.testName.Contains(test)).toList;
我希望我可以选择所有testName为a / b / c / d的记录。在SQL语句中,应该是
select * from table where testName = 'a' OR testName = 'b' OR testName = 'c' OR testNmae = 'd'
在实际程序中,列表是动态的,因此可以确保大小为1或99。
但是当我尝试使用.contains时,它将引发包含不能将List转换为字符串的错误。
解决方法
您有一个List<string>
,并且您想测试一列以查看string
是否包含与您的List
中的任何一个匹配的子字符串。所以尝试
var list = db.table.Where(t => test.Any(t.testName.Contains)).ToList();
如果要检查是否实际上相等,请使用
var list = db.table.Where(t => test.Any(tt => t.testName == tt)).ToList();
,
A,您忘记给我们提供db.Table
的类型,但似乎它返回了一系列相似的对象,其中每个对象都有一个字符串属性TestName
。
为了使讨论更加容易,我们假设您的表包含Tests
,表的每一行都是一个Test
,每个Test
都具有字符串属性TestName
。
要求(给出一个字符串序列),请提供表中所有TestName等于字符串序列中元素之一的测试。
在您的代码db.table.where(t =>
中,每t个是一个测试。
因此,您只想保留那些在字符串序列中具有名称的测试:
var requiredTestNames = new List<string> {"a","b","c","d"};
var testsWithRequiredTestName = db.Table
.Where(test => requiredTestNames.Contains(test.TestName))
.ToList();
换句话说:
我有一系列必需的测试名称。从充满测试的表中,仅保留那些具有test.TestName值(在requiredTestNames中)的测试。
顺便说一句:您是否通过使用描述其含义的标识符,正确使用单数和复数名词来发现代码更易读,并且看起来与您的要求更相似?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。