我不确定我写的标题是否足够,但我会尽力解释我想在这里完成的事情:
我正在尝试重新创建此查询,用于查找TestColumn
中的不同数据:
List<string> groupQuery = (from p in testDepo
group p by new { p.TestColumn}
into distinctTest
select distinctTest.First().TestColumn).ToList();
但不是静态调用TestColumn
。我想动态地将名称:TestColumn
传递给变量,然后使用变量名称执行我的不同值查询。
到目前为止,我有这个:
string primaryColumn = "TestColumn"
List<string> groupQuery= (from p in testDepo
group p by new { primaryColumn }
into distinctTest
select distinctTest.First().GetType().GetProperty(primaryColumn).GetValue(distinctTest.First()).ToString()).ToList();
我知道我可能正在做一些愚蠢的事,但我现在无法完全绕过它。我的动态查询只有一半有效。它只获得第一个distict值,但不是其他的。任何人都可以帮助我吗?
答案 0 :(得分:4)
您可以使用属性列字符串从Func
创建Expression
,如下所示:
var primaryColumn = "TestColumn";
var param = Expression.Parameter(typeof(Test), "p");
var col = Expression.Property(param, primaryColumn);
var lambda = Expression.Lambda(col, param);
var func = lambda.Compile();
然后在您的查询中使用它:
List<string> groupQuery= (from p in testDepo
group p by func.DynamicInvoke(p)
into distinctTest
select distinctTest.First()
.GetType()
.GetProperty(primaryColumn)
.GetValue(distinctTest.First())
.ToString()
).ToList()
答案 1 :(得分:0)
什么是TestDepro?您需要能够按名称返回列,例如p [primaryColumn]。