C# c LINQ查询将整个对象选择为新对象?

C# c LINQ查询将整个对象选择为新对象?,c#,linq,entity-framework-core,C#,Linq,Entity Framework Core,不确定我的问题措辞是否正确,但我想做的是返回一个新的viewmodel,其中一个部分是预订: public class Booking { public int BookingId { get; set; } public int CustomerId { get; set; } public Guid UniqueId { get; set; } public string EventId { get; set; }

不确定我的问题措辞是否正确,但我想做的是返回一个新的viewmodel,其中一个部分是预订:

public class Booking
    {

        public int BookingId { get; set; }
        public int CustomerId { get; set; }

        public Guid UniqueId { get; set; }
        public string EventId { get; set; }
        public bool IsPaid { get; set; }
        public double Price { get; set; }
        public DateTime BookingDate { get; set; }
        public DateTime DateBooked { get; set; }

        [JsonIgnore]
        public Customer Customer { get; set; }

        [JsonIgnore]
        public ICollection<BookingService> BookingServices { get; set; }

        [NotMapped]
        public IEnumerable<Service> Services { get; set; }

    }
我想知道的是如何在预订中选择所有预订信息,而不选择每个部分,即:

BookingId = b.BookingId,
BookingDate = b.BookingDate,
DateBooked = b.DateBooked,
CustomerId = b.CustomerId,
UniqueId = b.UniqueId,
EventId = b.EventId,
IsPaid = b.IsPaid,
Price = b.Price,
这是可以做到的,还是因为服务列表在预订模式中,它无法做到


谢谢。

没有其他方法,至少它与LINQ或查询无关

这里回答了如何克隆对象的问题:
没有LINQ方法可以做到这一点。我建议使用自定义属性标记要复制的每个属性。如果您不希望复制整个对象,而是复制某些属性,这将有所帮助。标记完所需的每个属性后,您只需将标记的道具设置为从一个对象反射到另一个对象。

您应该在此处使用AutoMapper,以避免写入每个路径

您可以在类上实现IClonable接口

public class MyClass : ICloneable
{
    public int Id { get; set; }
    public object Clone() => MemberwiseClone();
}
用法:

var list1 = new List<MyClass> 
{ 
    new MyClass() { Id = 2 }, 
    new MyClass() { Id = 5 } 
};

var list2 = list1.Select(x => (MyClass)x.Clone()).ToList();
list2.First().Id = 10; //list1 won't be affected

为什么在viewmodel中需要预订属性?你可以改为使用Customer.Booking,因为你已经在你有mappedI的客户中进行了预订,我会看一看对不起,我应该提到返回类型是JSON,如果我包括序列化程序获得循环引用的所有导航属性,那么使用Customer.Booking是不起作用的。
var list1 = new List<MyClass> 
{ 
    new MyClass() { Id = 2 }, 
    new MyClass() { Id = 5 } 
};

var list2 = list1.Select(x => (MyClass)x.Clone()).ToList();
list2.First().Id = 10; //list1 won't be affected