C# c LINQ查询将整个对象选择为新对象?
不确定我的问题措辞是否正确,但我想做的是返回一个新的viewmodel,其中一个部分是预订: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; }
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