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

C# 如何通过LINQ选择特定属性?,c#,linq,C#,Linq,我有一个方法返回类型为CarsCache的对象。我想在我的对象Vehicle中设置一些属性,该对象的Car对象来自CarChache对象。我可以很容易地做到,如下所示: var carCahe = getByCarId(1); Vehicle v = new Vehicle(); v.Car.value1 = carCahe.value1; 但我想通过LINQ来完成。我通过LINQ做了类似的事情,但该方法返回集合,然后我使用where和select。我有一个对象车,车里有一个对象车。我是这

我有一个方法返回类型为
CarsCache
的对象。我想在我的对象
Vehicle
中设置一些属性,该对象的
Car
对象来自
CarChache
对象。我可以很容易地做到,如下所示:

var carCahe =  getByCarId(1);

Vehicle v = new Vehicle();
v.Car.value1 = carCahe.value1;
但我想通过LINQ来完成。我通过LINQ做了类似的事情,但该方法返回集合,然后我使用where和select。我有一个对象
,车里有一个对象
。我是这样做的:

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()
    };
var carCache = DataCache.GetInstance().GeTCarById(1);
entity =new Vehicle
{
    IsActive = true,
    Car.value1 = carCache.value1,
    Car.value2 = carCache.value2
};
这也是工作,现在我想这样做的方法,它只返回一个对象。不是收集,但我不能这样做。我正在这样做:

entity =new Vehicle
{

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

我怎么能做到这一点呢?

我认为使用LINQ实现第二种方法没有什么好办法,因为
getByCarId
只返回单个项目,而不是列表。LINQ方法通常对可枚举项进行操作,因此在您的案例中不能使用像
Select
这样的方法

为什么不在第一条语句中从缓存中获取数据,并将其分配给另一条语句中使用它来创建
车辆

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

我不认为使用LINQ实现第二种方法有什么好方法,因为
getByCarId
只返回单个项,而不是列表。LINQ方法通常对可枚举项进行操作,因此在您的案例中不能使用像
Select
这样的方法

为什么不在第一条语句中从缓存中获取数据,并将其分配给另一条语句中使用它来创建
车辆

var carCache = DataCache.GetInstance().GeTCarById(1);
var entity = new Vehicle
{
  IsActive = true,
  Car = new Car { Value1 = carCache.value1, value2 = carCache.value2 }
};
请像这样尝试:

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()
    };
var carCache = DataCache.GetInstance().GeTCarById(1);
entity =new Vehicle
{
    IsActive = true,
    Car.value1 = carCache.value1,
    Car.value2 = carCache.value2
};
我假设类
Vehicle
中的
Car
属性已经以某种方式填充了
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()
    };
var carCache = DataCache.GetInstance().GeTCarById(1);
entity =new Vehicle
{
    IsActive = true,
    Car.value1 = carCache.value1,
    Car.value2 = carCache.value2
};

我假设类
Vehicle
中的
Car
属性已经以某种方式填充了
Car
对象-至少
new instance

IMO,当
GeTCarById
的返回值是具有新值的汽车时,您的方法是正确的;)。老实说:如果你的第一种方法是有效的,为什么你想让它更复杂,更不可读?第一种方法是完全清楚的,只要我看一次就可以了。LINQ方法更容易出错,可调试性差,可读性差,如果另一种方法有效,实际上不需要它。@ckruczek同意。LINQ速度很慢,但我只是想根据我的知识来做。在我看来,当
GeTCarById
的返回值是一辆具有新值的汽车时,您的方法是正确的;)。老实说:如果你的第一种方法是有效的,为什么你想让它更复杂,更不可读?第一种方法是完全清楚的,只要我看一次就可以了。LINQ方法更容易出错,可调试性差,可读性差,如果另一种方法有效,实际上不需要它。@ckruczek同意。林克是缓慢的,但我只是想做我的知识。谢谢回复。我做到了。我们可以在对象初始值设定项中执行此操作吗?
Vehicle
Car
都已经在使用对象初始值设定项。但是,您可以按照感谢回复中的说明简化
Car
属性的初始化。我做到了。我们可以在对象初始值设定项中执行此操作吗?
Vehicle
Car
都已经在使用对象初始值设定项。但是,您可以简化
Car
属性的初始化,如中所述