C# 使用Linq到SQL的动态不同值

C# 使用Linq到SQL的动态不同值,c#,linq,C#,Linq,我不确定我写的标题是否足够,但我会尽我所能解释我在这里试图实现的目标: 我正在尝试重新创建用于从TestColumn中查找不同数据的查询: List<string> groupQuery = (from p in testDepo group p by new { p.TestColumn} into distinctTest

我不确定我写的标题是否足够,但我会尽我所能解释我在这里试图实现的目标:

我正在尝试重新创建用于从
TestColumn
中查找不同数据的查询:

 List<string> groupQuery = (from p in testDepo
                                      group p by new { p.TestColumn}
                                      into distinctTest
                                      select distinctTest.First().TestColumn).ToList();

我知道我可能在做一些愚蠢的事情,但我现在还不太明白。我的动态查询只工作了一半。它只获得了第一个distict值,而不是其余的值。有人能帮我吗?

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

您可以使用属性列字符串从
表达式创建
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()
然后在查询中使用它,如下所示:

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()
List groupQuery=(来自testDepo中的p)
按函数DynamicVoke(p)划分的p组
进行区分测试
选择distinctTest.First()
.GetType()
.GetProperty(主列)
.GetValue(distinctTest.First())
.ToString()
)托利斯先生()

您的查询中的
p
类型是什么?
p
是我试图从中获取不同值的对象。是的,但该对象的类型是什么?例如,我的实体模型连接到数据库中一个名为
Test
的表,我刚刚在代码
test
中命名了test类,就像您的表名一样。for
var p=Expression.Parameter(typeof(test),“p”)
我将无法使用
p
,因为它已在我的查询中使用。我必须同时更改变量名和字符串名吗?还是只更改变量名?只更改变量名。我修正了答案。非常感谢你的帮助!