我需要将列表转换为字典。这可以通过使用以下语法
在c#中完成var dictionary = myList.ToDictionary(e => e.Id);
我不知道id字段的名称,因为我正在创建一些代码来迭代对象及其子对象/列表并将它们附加到我的dbcontext。
我已经有代码来确定作为我的键值的属性的名称,但是对于测试,我只能使用“Id”(其他可能不同)
所以我需要基本上将这个字符串“c => e.Id”创建为Func,但我不确定哪些参数适用于Expression
个对象。
到目前为止我有这个
public static Expression<Func<T, bool>> strToFunc<T>(string propName)
{
Expression<Func<T, bool>> func = null;
var prop = typeof(T).GetProperty(propName);
ParameterExpression tpe = Expression.Parameter(typeof(T));
var left = Expression.Property(tpe, prop);
return func;
}
表达专家的人会非常感谢你的帮助。
提前致谢
答案 0 :(得分:0)
如果我理解你的问题,我就是这样做的,希望如果不这样做会有所帮助。
public static Dictionary<object, TValue> GenericToDictionary<TValue>(this IEnumerable<TValue> source, string propName)
{
Dictionary<object, TValue> result = new Dictionary<object, TValue>();
foreach (var obj in source)
{
result[obj.GetType().GetProperty(propName).GetValue(obj)] = obj;
}
return result;
}
答案 1 :(得分:0)
如果您将属性名称作为字符串,则可以尝试此操作。
public static Dictionary<string, T> ListToDictionary<T>(string propertyName, List<T> list)
{
Func<T, string> func = obj => typeof(T).GetProperty(propertyName).GetValue(obj) as string;
return list.ToDictionary(func);
}
否则你可以将表达式传递给lambda:
class Person
{
public int ID { get; set; }
public string Name { get; set; }
}
public static void DoSomething()
{
var people = new List<Person>();
var dict = people.ToDictionary(p => p.ID);
}