2016-11-21 89 views
0

要获得不同的值,我需要一个IEnumerable。Disitinct动态Linq

var results = gridData.Select(r => r.ExplicitColumnName).Distinct(); 

要在运行时决定列名,我需要使用System.Linq.Dynamic所需的IQueryable。

var results = gridData.AsQueryable().Select(columnNameIsInThisVar); 

我想我的方法返回json所以计算字符串列表,然后加载到JsonResult。但是我在列上获得不同的值和运行时灵活性时遇到了问题。

所以我想我的问题是,在LINQ中,我该如何做到这一点?

List<string> results = $"select distinct {columnName} from ridiculous_table_with_100_columns"; 

更新1

按照意见,我现在已经安装了动态的LINQ作为NuGet包,但我仍然不能转换到列表。

filterValues = gridData.AsQueryable().Select(columnName).Distinct(); 

它得到了我一个“无法隐式转换类型‘System.Linq.IQueryable’到‘System.Collections.Generic.List’。一个显式转换存在(是否缺少强制转换?)”

+0

通过在末尾添加'Distinct'(在'Select'之后)?动态LINQ在'IQueryable'上定义'Distinct'。 –

+0

动态Linq不提供独特的方法。选择之后,返回一个IQueryable。它需要转换为IEnumerable,但我想不到通过迭代IQueryable手动构建它的方法,在这种情况下,我可能会自己过滤出重复项。 – twelveFunKeys

+0

我看到'public static IQueryable Distinct(this IQueryable source);'System.Linq.Dynamic.DynamicQueryable'内部''。 –

回答

1

你可以用反射来做到这一点

var results = gridData.Select(r => r.GetType().GetProperty(colName).GetValue(r)).Distinct();