破译LINQ到对象查询涉及字符串

本文关键字:字符串 查询 对象 LINQ 破译 | 更新日期: 2023-09-27 18:17:12

(免责声明:我是LINQ的新手,我确实做了功课,但我所有的研究都是直接处理字符串的例子。我的代码处理对象的ObservableCollection,其中每个对象都包含一个字符串。

我有以下代码:

public class Word
{
    public string _word { get; set; }
    // Other properties.
}
ObservableCollection<Word> items = new ObservableCollection<Word>();
items.Add(new Word() { _word = "Alfa" });
items.Add(new Word() { _word = "Bravo" });
items.Add(new Word() { _word = "Charlie" });

我正在查找包含"r"的单词:

IEnumerable<Word> subset = from ii in items select ii;
subset = subset.Where(p => p._word.Contains("r"));

以上工作(我得到'Bravo'和'Charlie')。

我的问题:我从网上/书中找到的一些例子中设计了上面的LINQ查询。

  1. 它是如何做到它所做的?
  2. 有没有更好/更直接的方法?

谢谢。

破译LINQ到对象查询涉及字符串

您可以像下面这样实现更简单:

IEnumerable<Word> subset = items.Where(x => x._word.Contains("r"));

在上面的linq查询中,您使用名为Where的扩展方法筛选名为items的集合。items集合中满足Where方法中过滤条件的每个元素,都将包含在subset上。在Where中,您已经使用lambda表达式定义了过滤器。在=>的左侧,您有输入- items的随机元素,而在=>的右侧,您有输出,在您的情况下,它将是truefalse。在=>的右侧,使用名为Contains的字符串方法,简单来说,该方法检查作为参数传递给该方法的字符串是否包含在元素x的属性_word中。