繁体   English   中英

使用Linq to SQL的动态独特值

[英]Dynamic distinct values using Linq to SQL

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

我正在尝试重新创建用于查询TestColumn不同数据的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值,而不获得其他值。 谁能帮我吗?

您可以使用属性列字符串从Expression创建Func ,如下所示:

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()

什么是TestDepro? 您需要能够通过名称返回列,例如p [primaryColumn]。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM