2016-04-28 85 views
0

可有人請通過以下方式......它的駕駛我堅果幫助...創建泛型方法

// Three methods, virtually identical with the exception of the select field 
public IEnumerable<int> GetBrandID() 
{ 
    return myData.Select(m => m.BrandID).Distinct(); 
} 
public IEnumerable<int> GetModelID() 
{ 
    return myData.Select(m => m.ModelID).Distinct(); 
} 
public IEnumerable<int> GetVehicleID() 
{ 
    return myData.Select(m => m.VehicleID).Distinct(); 
} 

// How to create one method which returns the type specified in the parameter?? 
public IEnumerable<int> GetData(??? myType) 
{ 
    return myData.Select(m => myType).Distinct(); 
} 
+0

一個海盜問另一個「?這是爲什麼這艘巨輪伸出你的褲子」 ...... –

回答

2

這聽起來像你可能只是想要一個Func<Model, int>參數:

public IEnumerable<int> GetData(Func<Model, int> projection) 
{ 
    return myData.Select(projection).Distinct(); 
} 

你可以然後有:

var modelIds = GetData(m => m.ModelID); 
var vehicleIds = GetData(m => m.VehicleID); 

這是你在追求什麼? (這是假設myDataIEnumerable<Model>。如果這是你可能要接受Expression<Func<Model, int>>代替IQueryable<Model>)。

+0

非常感謝你的幫助,這一點很明確,很直接,對我非常有幫助。非常感激。 X22。 – X22

0
public ICollection<T> FindAllWhere(Expression<Func<T, bool>> selectSelector) 
{ 
    ICollection<T> elements = EntitySet.Select(selectSelector).ToList().Distinct(); 

    return elements; 
} 
+1

這似乎沒有回答這個問題,海事組織......它看起來像是對一個不同問題的回答。 –

+0

它是更通用的,可以改變事件類型int –

+1

不,目前它不會*編譯*。讓我們從一些回答OP的實際要求的東西開始,然後再試着使其更具通用性。 –

1

目前尚不清楚你到底是經過什麼。也許這樣?

public static IEnumerable<TResult> GetData<TModel, TResult> (this IEnumerable<TModel> enumerable, Func<TModel, TResult> projection) 
{ 
    return enumerable.Select(projection); 
} 

而且不僅僅是這樣調用:

var ints = myData.GetData<MyModel,int>(m=>m.ModelID).Distinct(); 
var doubles = myData.GetData<MyModel,double>(m=>m.DoubleProp).Distinct(); 

等等

+1

請注意,如果您也提供數據,添加方法沒有任何好處 - var ints = myData.Select(m => m.ModelID).Distinct()'... –