我想知道是否有更好的方法来实现这一目标;
我有一个对象 - 其中一个属性是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();
答案 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();
现在你有了包含过滤器的字典对象,这样你就可以使用它们,而不是经历构建一堆你真正不需要的字符串数组的额外步骤。