LINQ基于两个属性筛选元素

14 浏览
0 Comments

LINQ基于两个属性筛选元素

我有一个包含唯一键的字符串列表

var uniqueKeys = new List {"01", "04", "09", "26", "27"};

我想根据这些唯一键筛选另一个列表。

列表中的数据可以看作是这样的:

To  From    
01  05
01  02
09  04
01  09
01  45
04  06
27  12

我想以这样的方式从这个列表中选择数据,即"To"和"From"属性值都在uniqueKeys中

期望的结果应该是:

To  From
09  04
01  09

我在互联网上看了很多帖子,但是我无法用简单的LINQ格式编写逻辑。

如果有人遇到过这个问题,请帮助我。

0
0 Comments

LINQ是一种用于查询和操作数据的技术,可以轻松地对集合进行过滤和筛选。在使用LINQ进行过滤时,有时候需要根据两个属性进行筛选。本文将介绍如何通过LINQ筛选基于两个属性的元素,并提供了一种性能改进的方法。

在使用LINQ进行过滤时,可以使用.Contains方法来检查集合是否包含某个元素。同时,也可以利用LINQ的.Where方法来根据指定条件对集合进行筛选。

下面的示例代码展示了如何使用.Contains和.Where方法来筛选基于两个属性的元素:

var uniqueKeys = new List {"01", "04", "09", "26", "27"};
var result = data
    .Where(x => uniqueKeys.Contains(x.From) && uniqueKeys.Contains(x.To)) 
    .ToArray();

然而,需要注意的一点是,这个算法是线性的,也就是说,它每次都需要遍历uniqueKeys来检查是否包含某个值。为了提高性能,可以使用HashSet来替代List,因为HashSet提供了O(1)的.Contains检查。

下面的示例代码展示了如何使用HashSet来改进性能:

var uniqueKeys = new List {"01", "04", "09", "26", "27"};
var uniqueKeysSet = new HashSet(uniqueKeys);
var result = data
    .Where(x => uniqueKeysSet.Contains(x.From) && uniqueKeysSet.Contains(x.To)) 
    .ToArray();

然而,如果uniqueKeys中的元素数量较少,可以忽略这种性能改进。因为这样做会使代码变得复杂,而且并没有必要。

通过使用LINQ的.Contains和.Where方法,可以轻松地筛选基于两个属性的元素。如果需要提高性能,可以使用HashSet来替代List进行.Contains检查。但是,如果uniqueKeys中的元素数量较少,可以忽略性能改进。

0
0 Comments

LINQ是一种流行的.NET编程语言中的查询语言,它可以用于从集合中过滤和操作数据。在LINQ中,我们可以使用.Where方法来过滤集合中的元素,并可以基于一个或多个属性来进行过滤。本文将讨论一个具体的示例,即如何基于两个属性来过滤元素,并提供相应的解决方法。

示例中使用的数据是一个包含多个Example对象的列表。每个Example对象都具有两个属性:FromTo。我们的目标是根据这两个属性的值来过滤出符合条件的元素。

首先,我们创建了一个包含示例数据的List<Example>对象。然后,我们定义了一个uniqueKeys列表,其中包含了一组唯一的键值。接下来,我们使用LINQ的.Where方法来过滤数据列表。

.Where方法的lambda表达式中,我们使用了uniqueKeys.Contains方法来判断FromTo属性的值是否包含在uniqueKeys列表中。只有当两个属性的值都在uniqueKeys列表中时,才会将该元素包含在过滤后的列表中。

最后,我们使用.ToList方法将过滤后的结果转换为一个列表对象,并将其存储在filteredList变量中。

通过这种方式,我们可以根据两个属性的值来过滤集合中的元素。这在处理实际业务场景中非常有用,例如在数据库查询或数据分析中。

总结起来,本文介绍了如何使用LINQ来基于两个属性来过滤元素。通过使用.Where方法和.Contains方法,我们可以轻松地实现这一目标。希望本文对你理解LINQ的使用有所帮助。

0
0 Comments

问题的原因是代码中缺少一个")"导致语法错误。解决方法是在".ToList()"之前添加一个")"。

假设你的类名列表为"listToFrom"。你可以使用"&&"操作符来过滤基于两个属性的元素来获取所需的列表。

var filteredList = listToFrom.Where(x => uniqueKeys.Contains(x.To) && 
                    uniqueKeys.Contains(x.From)).ToList();

你在".ToList()"之前缺少了一个")"。

感谢ąbek的指正,已经进行了修正 🙂

0