我如何使用linq的select()从实体中过滤属性



以下是我的dto。

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

i无法过滤DAL层中的属性,因为此方法是从多个位置调用的&不同的呼叫需要不同的属性。

我尝试了下面的东西。

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

但这也会抛出编译时间错误

那么,如何使用select() ??

从产品实体过滤属性

谢谢。

尝试以下

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

但是请注意,您正在创建一个匿名对象

update

,或者如果您不想要匿名对象,只需创建一个视图

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

您可以使用元组。

C#7元组之前。

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

使用C#7。C#7新功能

var products = dalLayer.GetProductsList().Select(x => Tuple.Create(x.PId, x.Name));
foreach(var (PId, Name) in products)
{
    Console.WriteLine(PId);
    Console.WriteLine(Name);
}

最新更新