2010-10-23 4 views
0

Я хотел бы передать функцию LINQ-запросам для выполнения операций с существующими данными. Напр. У меня есть эта функция:Передача функции на запрос LINQ

string doStuff(Product prod) 
{ 
    return string.Format("{0} - {1}", prod.f1, prod.s2); 
} 

При запросе продуктов, я хотел бы передать в этой функции, так что она возвращает эту строку и присвоить его свойство продукта NewString.

Пример POCO объект репозиторий возвращает:

class Product 
{ 
    public string NewString{get; set;}; 
    public string f1 {get; set;}; 
    public string s2 {get; set;}; 
} 

//Service layer 
public IList<Product> GetProducts() 
{ 
    //I currently have this: 
    return _repository.GetProducts().ToList(); 
    //OR, is something like this possible? 
    return _repository.GetProducts().Select(p => p.NewString = doStuff(p)); 

} 

Все методы в репозитории возвращает IQuerable<Product>

Так в основном, я хочу, чтобы создать новую строку из существующих данных из уровня обслуживания. Как это сделать, не перебирая возвращенный список объектов?

ответ

0
//Service layer 
public IList<Product> GetProducts() 
{ 
    return _repository 
     .GetProducts() 
     .Select(p => new Product { 
      NewString = doStuff(p), 
      f1 = p.f1, 
      s2 = p.s2 
     }) 
     .ToList; 
} 
+0

Продукт имеет более 15 объектов, мне придется их выписать? Я уже сделал все это задание в репозитории. Мне просто нужно назначить doStuff для NewString. –

1

Если он рассчитывается на основе Product полей и необходимо, где Product нужен, почему бы не просто добавить вызов этой функции в NewString добытчика?

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