2012-04-03 4 views
1

클래스의 속성 목록을 함수에 전달하려고합니다. 속성 목록에 기반한 함수에서 쿼리를 생성 할 것입니다. Linq Select 메서드에서 정확히 같은 기능으로. 여기 Ingress 데이터베이스 용으로 구현할 것입니다. 예를 들어 Linq 표현식을 함수에 전달

, 프론트 엔드의

나는이 같은 선택을 실행 싶어,

내 엔티티 클래스 I이 같은 선택 함수를 호출 싶어이

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); 

결과를 사용하면 이름 및 주소 속성 값을 얻을 수 있습니다.

나는 내 선택 기능을해야는 다음과 같습니다 생각

(* 나는이의 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 Expressions의 전문가가 아닙니다.

MIT의 프로젝트 전화 DbLinq이 있지만 큰 프로젝트이지만 여전히 도움이되는 것은 없습니다.

누구든지 나를 시작할 수 있도록 도와 주시겠습니까? 아니면 다른 사람이 나에게 유용한 정보를 읽어 줄 수 있습니까?

+0

달성하고자하는 것이 확실하지 않습니다 ... 모든 고객의 이름과 주소를 원하십니까? –

+0

Kalin, 내 Select 메서드에서 전달 된 poperty 목록을 반복하고 싶습니다. 필자의 예에서는 이름과 주소 속성 만 제공해야합니다. – Sency

+1

당신은 당신이 무엇인가하고 싶은 _how_을 묘사합니다. 왜 그것을하고 싶은지, 즉 달성하고자하는 것을 묘사 해 주시겠습니까? –

답변

1

당신이하려는 것은 이름과 주소로 구성된 새로운 익명 유형을 만드는 것입니다.

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

업데이트 이것은 긴 형식의 LINQ (. 내가 더 나은 설명의 부족, 그 용어를 위로했다) 여기에 Microsoft의 샘플의를 통해 쉽게 달성, 링크는 아래 제공 : 그래서 다음과 같이하려고하십니까?

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; 
    } 

Select를 DataAccessService의 기능으로 구현하려고하는 이유를 모르겠습니까? 오히려 확장 메서드로 이것을 만들려고합니까? 이것이 뜻이 아니라면, 당신은 큰 의문을 가지고 있습니다. 한 주석 자의 제안에 따라, 어떻게하면 우리가 원하는대로 디자인 할 필요가 없는지 알려주십시오.

+0

죄송합니다 duluca, 당신은 그것을 얻을, 나는이 익명 형식의 함수에 전달하고, 함수에서, 나는이 속성 목록을 통과하고 반복하고 싶습니다. 이 속성을 값으로 반환하고 싶습니다. – Sency