2016-04-28 4 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); 

Это то, что вам нужно? (Это предполагает, что myData является IEnumerable<Model>. Если это IQueryable<Model> вы можете принять Expression<Func<Model, int>> вместо этого.)

+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, прежде чем пытаться сделать его более общим, чем taht. –

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()' ... –

Смежные вопросы