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();
您可以使用任何函数:
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();
现在,您有了包含过滤器的字典对象,这样您就可以使用它们,而不是通过构建一堆并不真正需要的字符串数组的额外步骤。