2017-05-02 3 views
1

다음은 내 DTO입니다.Linq select()를 사용하여 엔티티의 속성을 필터링하는 방법은 무엇입니까?

public class Product 
{ 
    public int PId { get; set; } 
    public decimal Price { get; set; } 
    public string Name { get; set; } 
    public bool IsActive { get; set; } 
    //& so on 
} 

제품 목록을 얻는 방법. 이 방법은 & 다른 호출이 다른 속성을 필요로 여러 위치에서 호출되기 때문에

public void GetProducts() 
    { 
     // below dal method returns collection of products. 
     // I am in need to select only few properties of the Product Entitiy 
     var product = dalLayer.GetProductsList().Select(x => x.PId, y => y.Name) 

    } 

나는 DAL 층의 속성을 필터링 할 수 없습니다.

나는 아래의 것들을 시도했다.

var products = dalLayer.GetProductsList().Select(
        (x, y) => new 
        { 
         x.Id, 
         y.Name 
        }); 

그러나이 또한 컴파일 던지는 시간 오류 나는 select()를 사용하여 제품의 개체에서 속성을 필터링하려면 어떻게 그렇게

?

감사합니다.

+1

당신은 필터링 할 사용하여 C#을, 당신은 왜'Where' 사용하지 않는? 또한 dalLayer.GetProductsList()를 사용하지 않는 이유는 분명하지 않습니다. Select (p => new {p.Id, p.Name})'. 두 속성은 같은 클래스에 있습니다. –

+0

그냥 할 때 참고 사항 당신이 투영을하고있는 선택은 가시적 인 것으로 생각하고, 필터링 할 곳을 사용할 때. – SCFi

+0

'Where' 메쏘드에서 사용할 수있는'predicate' /'func' 형식으로 필터링 기준을 전달해야합니다 –

답변

1

는 다음

var products = dalLayer.GetProductsList().Select(
        pr => new 
        { 
         Id =pr.Id, 
         EndDate =pr.EndDate, 
         StartDate=pr.Startdate, 
        }); 

을 시도하지만 당신은 익명의 객체

업데이트

를 만드는 있습니다 또는 당신은 익명의 객체 그냥 뷰를 생성하지 않으려면

public class ProductViewDto 
{ 
    public int Id{get;set;} 
    public DateTime EndDate {get;set;} 
    public DateTime StartDate{get;set;} 
} 

var products = dalLayer.GetProductsList().Select(
         pr => new ProductViewDto 
         { 
          Id =pr.Id, 
          EndDate =pr.EndDate, 
          StartDate=pr.Startdate, 
         }); 
+0

동일한 작업을 수행 할 수있는 곳이 있나요? 그러나 명명 된 객체 인 –

+0

네가 생성해야합니다. 그냥이 필요에 대한 사용자 정의 dto –

+0

내 업데이 트를 봐 –

0

당신은 ll은 튜플을 사용한다.

이전 C# 7 tuples.

var products = dalLayer.GetProductsList().Select(x => Tuple.Create(x.PId, x.Name)); 

foreach(var p in products) 
{ 
    Console.WriteLine(p.Item1); 
    Console.WriteLine(p.Item2); 
} 

7 C# 7 new Features

var products = dalLayer.GetProductsList().Select(x => Tuple.Create(x.PId, x.Name)); 

foreach(var (PId, Name) in products) 
{ 
    Console.WriteLine(PId); 
    Console.WriteLine(Name); 
} 
관련 문제