2016-11-21 87 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();