Lambda声明

时间:2014-10-24 12:57:14

标签: c# lambda

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

我有一个对象 - 其中一个属性是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();

3 个答案:

答案 0 :(得分:4)

您可以使用 任何 功能:

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();

答案 1 :(得分:0)

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;

答案 2 :(得分:0)

你有没有理由不查询字典对象?

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

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