在lambda表达式中表示多个

时间:2018-08-24 14:12:11

标签: c# linq lambda

我有一个string []变量,我想在lambda表达式中使用它来使用 like 子句过滤数据。我尝试使用包含,但是它的作用类似于'in'子句,这不是我所需要的。

请参见下面的代码,其行为类似于子句:

var inventories = ..............AsQuerable();
string[] strArray = <<somevalues>>;
inventories = inventories.Where(c => !strArray.Contains(c.columnName));

有人可以给我提供lambda表达式吗,它可以使用 like 而不是 in 使用数组来过滤记录。

4 个答案:

答案 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);
}