C# Lambda语句
我想知道是否有更好的方法来实现这一点 我有一个对象,其中一个属性是字典。我有一组逗号分隔的值。我需要过滤字典,只获取字典值与至少一个值匹配的元素 这是我曾经尝试过的,但是有没有一种更短的方法 我只是想解释一下: filterValue是值列表(例如“4,5”)C# Lambda语句,c#,lambda,C#,Lambda,我想知道是否有更好的方法来实现这一点 我有一个对象,其中一个属性是字典。我有一组逗号分隔的值。我需要过滤字典,只获取字典值与至少一个值匹配的元素 这是我曾经尝试过的,但是有没有一种更短的方法 我只是想解释一下: filterValue是值列表(例如“4,5”) List vals=new List(); AddRange(filterValue.Split(新字符[]{',})); 列出bindingEntities=实体。其中( e=>{ foreach(e.ExtraProperties中的
List vals=new List();
AddRange(filterValue.Split(新字符[]{',}));
列出bindingEntities=实体。其中(
e=>{
foreach(e.ExtraProperties中的KeyValuePair kvp)
{
if(vals.Contains(kvp.Value.ToString()))
返回true;
}
返回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 vals=new List();
AddRange(filterValue.Split(新字符[]{',}));
var bindingEntities=实体。其中(
e=>e.ExtraProperties.Any(
kvp=>vals.Contains(kvp.Value.ToString()).ToList();
列表VAL=新列表();
AddRange(filterValue.Split(新字符[]{',}));
列出bindingEntities=实体。其中(
e=>e.ExtraProperties.Values.Any(
val=>vals.Contains(val.ToString()))
.ToList();
或
List vals=new List();
AddRange(filterValue.Split(新字符[]{',}));
List bindingEntities=来自实体中的e
从e.ExtraProperties.Values中的val
其中vals.Contains(val.ToString())
选择e;
您不只是查询dictionary对象有什么原因吗
var result = filterValue.Where(d => d.Value.Contains(val.ToString()).ToList();
现在,您有了包含筛选器的dictionary对象,这样您就可以使用它们,而不必经过额外的步骤来构造一组您并不真正需要的字符串数组。好吧,您不需要将
拆分的结果放入列表中,只需执行.Split(','))
。根据filterValue
中的值的多少,可能更值得使用HashSet
而不是List
。事实上,数组同样支持Contains()
方法,因此创建List
也毫无意义:var vals=filterValue.Split(new char[]{','});
。太好了!又短又干净!如果您删除列表
声明,并使用从string.Split
返回的string[]
,甚至可以将其缩短。我认为需要修复ToString()周围的括号,以便它能够compile@Slugart不,它们很好。真的,Any()返回bool,还有ToList()方法-试着编译它。ExtraProperties没有值Property ExtraProperties是Dictionary对吗?@VanoMaisuradze我错了吗?我忘了它是Dictionary。所以答案是否定的:)好吧,如果你认为这个否决票是我的,那就接受我的否决票)祝你好运
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;
var result = filterValue.Where(d => d.Value.Contains(val.ToString()).ToList();