使用Linq to SQL的动态不同值

时间:2015-04-24 19:07:39

标签: c# linq

我不确定我写的标题是否足够,但我会尽力解释我想在这里完成的事情:

我正在尝试重新创建此查询,用于查找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值,但不是其他的。任何人都可以帮助我吗?

2 个答案:

答案 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]。