如何通过LINQ选择特定属性?

时间:2016-02-10 06:09:57

标签: c# linq

我有一个返回类型为CarsCache的对象的方法。我想在我的对象Vehicle中设置一些属性,该对象具有来自Car对象的CarChache对象。我可以像下面这样轻松地做到:

var carCahe =  getByCarId(1);

Vehicle v = new Vehicle();
v.Car.value1 = carCahe.value1;

但我想通过LINQ来做。我通过LINQ做了类似的事情,但该方法返回集合,然后我使用where并选择。我有一个对象Vehicle并且车辆中有一个对象Car。我是这样做的:

entity = new Vehicle
{

    IsActive = true,
    Car = DataCache.GetInstance()
          .GetAllCars()
          .ToList()
          .Where(o => o.carId== carId)
          .Select(o => new Car{Value1= o.value1, value2= o.value2})
          .Single()
    };

现在这也正常工作我想用只返回一个对象的方法来做这件事。没有收集,但我无法做到这一点。我这样做:

entity =new Vehicle
{

  IsActive = true,
  Car= DataCache.GetInstance() // it retruns carCahe object.
         .GeTCarById(1)
         //Here i want to set value1 property and value2 property
 };

我该怎么做?

2 个答案:

答案 0 :(得分:3)

我不认为有一种很好的方法可以使用LINQ实现第二种方法,因为SQL> WITH sample_data AS( 2 SELECT 'A' col1, 'E' col2 FROM dual UNION ALL 3 SELECT 'C' col1, 'C' col2 FROM dual UNION ALL 4 SELECT '' col1, 'C' col2 FROM dual UNION ALL 5 SELECT 'D' col1, '' col2 FROM dual UNION ALL 6 SELECT 'G' col1, 'C' col2 FROM dual 7 ) 8 SELECT COALESCE(col1, col2) val FROM sample_data; V - A C C D G SQL> 只返回单个项目,而不是列表。 LINQ方法通常在枚举上运行,因此在您的情况下不能使用getByCarId之类的方法。

为什么不在第一个语句中从缓存中获取数据并将其分配用于在另一个语句中创建Select

Vehicle

答案 1 :(得分:2)

请尝试这样:

var carCache = DataCache.GetInstance().GeTCarById(1);
entity =new Vehicle
{
    IsActive = true,
    Car.value1 = carCache.value1,
    Car.value2 = carCache.value2
};

我认为班级Car中的Vehicle属性已经以某种方式填充了Car个对象 - 至少new instance