2012-04-03 2 views
1

Я хочу передать список свойств класса функции. в функции, основанной на списке свойств, я собираюсь сгенерировать запрос. Как точно такая же функциональность в методе Linq Select. Здесь я собираюсь реализовать это для базы данных Ingress.Передача Linq Выражение функции

В качестве примера,

в переднем конце я хочу бежать отборное как это,

Мой Entity Класс как этот

public class Customer 
{ 
    [System.Data.Linq.Mapping.ColumnAttribute(Name="Id",IsPrimaryKey=true)] 
    public string Id { get; set; } 

    [System.Data.Linq.Mapping.ColumnAttribute(Name = "Name")] 
    public string Name { get; set; } 

    [System.Data.Linq.Mapping.ColumnAttribute(Name = "Address")] 
    public string Address { get; set; } 

    [System.Data.Linq.Mapping.ColumnAttribute(Name = "Email")] 
    public string Email { get; set; } 

    [System.Data.Linq.Mapping.ColumnAttribute(Name = "Mobile")] 
    public string Mobile { get; set; } 
} 

Я хочу вызвать Выберите функцию, как это,

var result = dataAccessService.Select<Customer>(C=>C.Name,C.Address); 

then, используя результат, я могу получить значения свойств имени и адреса.

Я думаю, что мой выбор функция должна выглядеть следующим образом,

(* Я думаю, что это должно сделать с помощью Linq выражения. Но им не уверен, что являются входным параметром и типа возвращаемого значения. *)

Class DataAccessService 
{ 
    // I'm not sure about this return type and input types, generic types. 
    public TResult Select<TSource,TResult>(Expression<Func<TSource,TResult>> selector) 
    { 
     // Here I wanna Iterate through the property list, which is passed from the caller. 
     // Here using the property list, 
     // I can get the ColumnAttribute name value and I can generate a select query. 
    } 
} 

Это попытка создать такую ​​функциональность, как в Linq. Но я не эксперт в выражениях Linq.

Существует проектный вызов DbLinq от Массачусетского технологического института, но это большой проект, и я все еще не мог извлечь из этого ничего полезного.

Может кто-нибудь, пожалуйста, помогите мне начать это, или кто-нибудь может связать мне некоторые полезные ресурсы, чтобы прочитать об этом.

+0

Не знаете, чего вы хотите достичь ... Вы хотите получить имя и адрес всех клиентов? –

+0

Kalin. В моем методе «Выбрать» я хочу пройти через список poperty. В моем примере он должен дать мне только свойства имени и адреса. – Sency

+1

Вы описываете _how_ вы хотите что-то сделать. Не могли бы вы объяснить, почему вы хотите это сделать, то есть, чего вы хотите достичь? –

ответ

1

Что вы пытаетесь сделать, это создать новый анонимный тип, состоящий из имени и адреса. Это легко достижимо с помощью длинной формы LINQ (. Я сделал этот термин вверх, из-за отсутствия лучшего объяснения) Вот пример от Microsoft, ссылка приведена ниже:

public void Linq11() 
{ 
    List<Product> products = GetProductList(); 

    var productInfos = 
     from p in products 
     select new { p.ProductName, p.Category, Price = p.UnitPrice }; 

    Console.WriteLine("Product Info:"); 
    foreach (var productInfo in productInfos) 
    { 
     Console.WriteLine("{0} is in the category {1} and costs {2} per unit.", productInfo.ProductName, productInfo.Category, productInfo.Price); 
    } 
} 

Детали: Linq Select Samples

Update: Так вы пытаетесь сделать что-то подобное?

var result = dataAccessService.Select<Customer>(c => c.Name, c => c.Address); 

public object[] Select<TSource>(params Expression<Func<TSource, object>>[] selectors) 
    { 
     var toReturn = new object[selectors.Count()]; 

     foreach (var s in selectors) 
     { 
      var func = s.Compile(); 
      //TODO: If you implement Select a proper extension method, you can easily get the source 
      toReturn[i] = func(TSource); 
     } 
     return toReturn; 
    } 

Я не понимаю, почему вы пытаетесь реализовать Выбор как функция DataAccessService? Вы пытаетесь создать это скорее как метод расширения? Если это не то, что вы имеете в виду, вам нужно перефразировать, что вы задаете большое время, и, как предложил один комментатор, расскажите нам, что вам не нужно, как вы хотите, чтобы мы его проектировали.

+0

Извините duluca, вы не получите его, я хочу передать этот анонимный тип в функцию, и в функции я хочу проиграть этот список свойств, который передан. и я хочу вернуть эти свойства со значениями. – Sency

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

  • Нет связанных вопросов^_^