我有一个string []变量,我想在lambda表达式中使用它来使用 like 子句过滤数据。我尝试使用包含,但是它的作用类似于'in'子句,这不是我所需要的。
请参见下面的代码,其行为类似于的子句:
var inventories = ..............AsQuerable();
string[] strArray = <<somevalues>>;
inventories = inventories.Where(c => !strArray.Contains(c.columnName));
有人可以给我提供lambda表达式吗,它可以使用 like 而不是 in 使用数组来过滤记录。
答案 0 :(得分:1)
LINQ为此提供的唯一方法是ObjectClicker
,.Where()
或.StartsWith()
。另外,这里How to do SQL Like % in Linq?
答案 1 :(得分:0)
我不确定您要做什么,但是我认为这就是您要完成的事情。如果没有,请提供更多信息,我将更新我的答案。
要检查一个字符串是否等于另一个字符串的一部分(类似确实如此),可以使用.Contains
方法:
bool contains = "Some fancy sentence".Contains("fancy");
这将评估为true。以您的示例为例,这将导致以下结果:
var inventories = ..............AsQuerable();
string[] strArray = <<somevalues>>;
inventories = inventories.Where(inv => !strArray.Any(s => inv.columnName.Contains(s)));
这会检查所有库存并删除所有strArray
值中的库存列名称(部分出现)的所有库存。
答案 2 :(得分:0)
与VB.NET不同,C#没有内置的 like 运算符。但是,您可以轻松地从VB.NET使用该运算符。您要做的是引用程序集Microsoft.VisualBasic.dll
,并在文件顶部包含一个using Microsoft.VisualBasic.CompilerServices;
。那你可以做
var inventories = ..............AsQuerable();
string[] strArray = <<somevalues>>;
inventories = inventories.Where(c => !strArray.Any(s => LikeOperator.LikeString(c.columnName, s, CompareMethod.Text)));
答案 3 :(得分:0)
它不是纯Lambda
表达式,但也许可以帮忙:
List<SomeObject> inventories = new List<SomeObject>();
// add objects to list...
string[] strArray = <<somevalues>>;
// result will be stored here
List<SomeObject> filtered = new List<SomeObject>();
foreach (var itm in strArray)
{
// LIKE '%SOMEVALUE%'
var match = inventories.Where(x => x.columnName.Contains(itm)).ToList();
// LIKE '%SOMEVALUE'
// var match = inventories.Where(x => x.columnName.StartsWith(itm)).ToList();
// LIKE 'SOMEVALUE%'
// var match = inventories.Where(x => x.columnName.EndsWith(itm)).ToList();
foreach (var m in match)
filtered.Add(m);
}