【问题标题】:Remove all items from a list that do not contain a unique word from an array从列表中删除不包含数组中唯一单词的所有项目
【发布时间】:2017-06-26 13:18:48
【问题描述】:

我有一个唯一词的string[] 和一个唯一类的IQueryable<>,其中包含一个字符串。我想从 IQueryable<> 中删除其字符串变量不包含唯一单词之一的所有项目。我怎样才能以一种不会在运行时严重消耗我的代码的方式来做到这一点?

其中一个变量是string Name。我有一个IQueryable<Project> 和一个string[] words。我想创建一个 new IQueryable<Project>,其中所有项目的名称都至少包含单词数组中的一个单词。

如果不循环两次IQueryable,我不知道如何做到这一点(一次标记Projects,其中Name 包含数组中的一个单词,然后再次移动那些@987654332 @ 变成一个新的IQueryable),对于一个大的IQueryable 来说,这将是一个严重的时间压力。

【问题讨论】:

  • 你应该发布你正在尝试的代码以及它会抛出的错误。
  • @dcg 我什至不知道该尝试什么,因为我不知道该怎么做。
  • 你能不能说的更准确点。我对你的描述有点困惑。你的 IQueryble 是 IQueryable 吗?应该删除哪些元素等。
  • @LionelD 查看我的编辑
  • 这个页面告诉你如何从IQueryable中删除:stackoverflow.com/questions/2937528/…

标签: c# razor logic


【解决方案1】:

如果 Name 属性只是一个包含多个单词的字符串:

var newQueryable = queryable
       .AsEnumerable()
       .Where(project => words
                .Intersect(project.Name.Split(' '), StringComparer.OrdinalIgnoreCase)
                .Any())
       .AsQueryable();

如果 Name 已经是一个包含所有单词的数组,则不要使用 split 函数。

【讨论】:

  • 这是一个开始,但 Project.Name 有多个单词
  • 我试过了,我的代码抛出了异常{"LINQ to Entities does not recognize the method 'System.Collections.Generic.IEnumerable`1[System.String] Intersect[String](System.Collections.Generic.IEnumerable`1[System.String], System.Collections.Generic.IEnumerable`1[System.String], System.Collections.Generic.IEqualityComparer`1[System.String])' method, and this method cannot be translated into a store expression."}
  • @jαsοndιnAlt 这很好用。你知道我可以添加什么让它忽略 project.Name 字符串中的标点符号吗?
  • 你必须实现一个自定义的 IgnorePunctuationEqualityComparer 并用它替换“StringComparer.OrdinalIgnoreCase”。
  • 你可以通过调整string.Split()来完成忽略。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 2019-10-09
  • 1970-01-01
  • 2018-11-06
  • 2020-09-26
  • 2013-10-22
  • 1970-01-01
相关资源
最近更新 更多