【问题标题】:How to filter a list of a class by a list of a string?如何通过字符串列表过滤类列表?
【发布时间】:2014-01-06 17:24:54
【问题描述】:

所以我有这门课:

class Blah
{
    public string Number { get; set; }
    public string Title { get; set; }

    public Blah(string nums, string ttls)
    {
        Number = nums;
        Title = ttls;
    }
}

我想按数字列表(字符串)过滤它。

所以我想做这样的事情:

List<Blah> blahs = new List<Blah> {Blah("0233", "Ho"), Blah("1209", "Ah"), Blah("2929", "Eh")};

List<string> bleh = new List<string> {"10233", "21209"};

List<Blah> missBlahs = (blahs.Where(b => !bleh.Contains(b.Number))).ToList<Blah>();

//Result: Blah("2929", "Eh")

但是,我不断收到所有的废话。我不想要。

【问题讨论】:

  • 您的示例列表不相交(即blahs 中的任何条目在列表bleh 中都没有Number)。这是故意的吗?
  • 那是因为您检查集合[10233, 21209] 是否包含02331209。它没有,所以这些没有被过滤。您必须添加一个附加层来检查集合的每个条目。
  • 你需要解释一下为什么bleh中的数字以它们的索引(1xxx, 2xxx)为前缀,以及这个索引意味着什么逻辑。

标签: c# linq filter


【解决方案1】:

您是否要过滤掉作为List&lt;String&gt; 中任何值的子字符串的任何Number 属性?鉴于没有一个值直接匹配,这似乎是这种情况。如果是这样,请尝试以下操作

blahs
  .Where(b => bleh.Any(x => x.Contains(b.Number))
  .ToList();

【讨论】:

  • 好像是这样。让我先检查一下。
  • 像宣传的那样工作!谢谢你,先生!
  • @dotNetN00b 它一直有效,直到您的 bleh 包含类似 ixyz 的内容,其中 ixy 是正在搜索的内容,bleh 中的实际值将是 xyz。根据您的示例输入,您想忽略i,导致它们不匹配,而它们将根据此代码匹配。
【解决方案2】:

假设 bleh 列表中的第一个数字是拼写错误,这就是你想要的

List<Blah> blahs = new List<Blah> { new Blah("0233", "Ho"), new Blah("1209", "Ah"), new Blah("2929", "Eh") };

List<string> bleh = new List<string> { "0233", "1209" };

List<Blah> missedBlahs = blahs.FindAll(b => !bleh.Contains(b.Number));

//Result: Blah("2929", "Eh")

【讨论】:

  • 在“bleh”列表中,我从“10233”中删除了“1”,从“21209”中删除了“2”。如果你想要它们,你可能正在查看一个正则表达式
猜你喜欢
  • 2013-09-24
  • 1970-01-01
  • 2017-05-10
  • 2022-01-16
  • 2017-04-23
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
相关资源
最近更新 更多