繁体   English   中英

如何在 LINQ C# 中使用另一个列表过滤列表

[英]How to filter a list using another list in LINQ C#

列表需要过滤的数据如下:“1000”、“1000A”、“1000B”、“2000”、“2000C”、“2003”、“2006A”

我用来过滤数据的列表,例如:'1000'、'2000'、'2003'

预期输出:1000', '1000A', '1000B', '2000', '2000C', '2003'(预期输出就像我们在 SQL server LIKE 运算符中所做的那样)

尝试使用正则表达式,如下所示:

var list1 = new List<string>{"1000", "1000A", "1000B","2000","2000A","3000BV"};
var list2 = new List<string>{"1000","2000"};

var result = list1.Where(x => list2.Any(y => Regex.IsMatch(x, $".*{y}.*"))).ToList();

注意: .*相当于 SQL 中的%

假设你有两个类,如下所示,

public class MainClass
{
    public string ActualValue { get; set; }
}
public class FilterClass
{
    public string Description { get; set; }
}

我正在加载一些这样的虚拟数据,

        List<MainClass> mainList = new List<MainClass>();
        mainList.Add(new MainClass() { ActualValue = "1000" });
        mainList.Add(new MainClass() { ActualValue = "1000A" });
        mainList.Add(new MainClass() { ActualValue = "1002F" });
        mainList.Add(new MainClass() { ActualValue = "1002A" });
        mainList.Add(new MainClass() { ActualValue = "1003" });

        List<FilterClass> filterList = new List<FilterClass>();
        filterList.Add(new FilterClass() { Description = "1003" });
        filterList.Add(new FilterClass() { Description = "1002" });

O/P 将根据您的要求提供,

        var output1 = mainList.Where(x => filterList.Any(y => x.ActualValue.Contains(y.Description))).ToList();

你可以这样使用 linq :

var filterList = new List<string>(){"1000", "1000A", "1000B", "2000", "2000C", "2003", "2006A"};
var filterLikeList = new List<string>(){"1000", "2000", "2003"};

var results = filterList.Where(x=> filterLikeList.Any(y=>x.Contains(y)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM