Lambda Statement

本文关键字:Statement Lambda | 更新日期: 2023-09-27 18:27:39

我想知道是否有更好的方法来实现这一点;

我有一个对象,其中一个属性是Dictionary。我有一组逗号分隔的值。我需要过滤Dictionary,只获取Dictionary值与值中至少一个匹配的元素

这是我尝试过的,但有没有更短的方法?

只是为了解释:filterValue是值列表(例如"4,5'")

List<string> vals = new List<string>();
vals.AddRange(filterValue.Split(new char[]{','}));
List<T> bindingEntities = entities.Where(
             e => {
                foreach(KeyValuePair<string, object> kvp in e.ExtraProperties)
                {
                    if(vals.Contains(kvp.Value.ToString()))
                        return true;
                }
                return false;
             }).ToList();

Lambda Statement

您可以使用任何函数:

List<string> vals = new List<string>();
vals.AddRange(filterValue.Split(new char[] { ',' }));
var bindingEntities = entities.Where(
             e => e.ExtraProperties.Any(
             kvp => vals.Contains(kvp.Value.ToString()))).ToList();
List<string> vals = new List<string>();
vals.AddRange(filterValue.Split(new char[]{','}));
List<T> bindingEntities = entities.Where(
                                         e => e.ExtraProperties.Values.Any(
                                             val => vals.Contains(val.ToString())))
                                  .ToList();

List<string> vals = new List<string>();
vals.AddRange(filterValue.Split(new char[]{','}));
List<T> bindingEntities = from e in entities
                          from val in e.ExtraProperties.Values
                          where vals.Contains(val.ToString())
                          select e;

您不只是查询dictionary对象是有原因的吗?

var result = filterValue.Where(d => d.Value.Contains(val.ToString()).ToList();

现在,您有了包含过滤器的字典对象,这样您就可以使用它们,而不是通过构建一堆并不真正需要的字符串数组的额外步骤。