C# LINQ到实体类似代码
我有类似的LINQ到实体请求:C# LINQ到实体类似代码,c#,entity-framework,linq,linq-to-entities,C#,Entity Framework,Linq,Linq To Entities,我有类似的LINQ到实体请求: ComdataFuelDetailVM model = (from i in db.ComdataFuels where i.ID == id.Value select new ComdataFuelDetailVM() {
ComdataFuelDetailVM model = (from i in db.ComdataFuels
where i.ID == id.Value
select new ComdataFuelDetailVM()
{
ID = i.ID,
CardNo = i.CardNo,
City = i.City,
CompanyId = i.CompanyId,
DriverId = i.DriverId,
DriverName = i.DriverName,
EmployeeNo = i.EmployeeNo,
Fees = i.Fees,
GalPrice = i.GalPrice,
NoOfGal = i.NoOfGal,
OwnerOp = i.OwnerOp,
PayoutRebate = i.PayoutRebate,
Rebate = i.Rebate,
State = i.State,
TotalCost = i.TotalCost,
TransDate = i.TransDate,
TransTime = i.TransTime,
TruckNo = i.TruckNo,
TruckStopCode = i.TruckStopCode,
TruckStopInvoiceNo = i.TruckStopInvoiceNo,
TruckStopName = i.TruckStopName,
UnitNo = i.UnitNo
}).FirstOrDefault();
ComdataFuelDeleteVMmodel = (from i in db.ComdataFuels
where i.ID == id.Value
select new ComdataFuelDeleteVM()
{
ID = i.ID,
CardNo = i.CardNo,
City = i.City,
CompanyId = i.CompanyId,
DriverId = i.DriverId,
DriverName = i.DriverName,
EmployeeNo = i.EmployeeNo,
Fees = i.Fees,
GalPrice = i.GalPrice,
NoOfGal = i.NoOfGal,
OwnerOp = i.OwnerOp,
PayoutRebate = i.PayoutRebate,
Rebate = i.Rebate,
State = i.State,
TotalCost = i.TotalCost,
TransDate = i.TransDate,
TransTime = i.TransTime,
TruckNo = i.TruckNo,
TruckStopCode = i.TruckStopCode,
TruckStopInvoiceNo = i.TruckStopInvoiceNo,
TruckStopName = i.TruckStopName,
UnitNo = i.UnitNo
}).FirstOrDefault();
等
ComdataFuelDetailVM和ComdataFuelDeleteVM具有相同的属性(但用作不同视图的视图模型):
任何人都希望编写一个方法,该方法返回如下表达式:
private Expression<Func<ComdataFuel, T>> GetPictureExpression<T>()
{
Expression<Func<ComdataFuel, T>> projection = i =>
new T()
{
ID = i.ID,
CardNo = i.CardNo,
City = i.City,
CompanyId = i.CompanyId,
DriverId = i.DriverId,
DriverName = i.DriverName,
EmployeeNo = i.EmployeeNo,
Fees = i.Fees,
GalPrice = i.GalPrice,
NoOfGal = i.NoOfGal,
OwnerOp = i.OwnerOp,
PayoutRebate = i.PayoutRebate,
Rebate = i.Rebate,
State = i.State,
TotalCost = i.TotalCost,
TransDate = i.TransDate,
TransTime = i.TransTime,
TruckNo = i.TruckNo,
TruckStopCode = i.TruckStopCode,
TruckStopInvoiceNo = i.TruckStopInvoiceNo,
TruckStopName = i.TruckStopName,
UnitNo = i.UnitNo
};
return projection;
}
私有表达式GetPictureExpression()
{
表达式投影=i=>
新T()
{
ID=i.ID,
CardNo=i.CardNo,
城市,
CompanyId=i.CompanyId,
DriverId=i.DriverId,
DriverName=i.DriverName,
EmployeeNo=i.EmployeeNo,
费用=i.费用,
GalPrice=i.GalPrice,
NoOfGal=i.NoOfGal,
OwnerOp=i.OwnerOp,
PayoutRebate=i.PayoutRebate,
返利=i.返利,
状态,状态,
总成本=即总成本,
TransDate=i.TransDate,
TransTime=i.TransTime,
TruckNo=i.TruckNo,
TruckStopCode=i.TruckStopCode,
TruckStopInvoiceNo=i.TruckStopInvoiceNo,
TruckStopName=i.TruckStopName,
UnitNo=i.UnitNo
};
回归投影;
}
但是我无法创建t对象…如果ComdataFuelDetailVM和ComdataFuelDeleteVM具有相同的属性,那么只需为这些类编写包含所有这些属性的公共接口或基类,并在方法中使用以下构造:
private Expression<Func<ComdataFuel, T>> GetPictureExpression<T>() where T : ICommonInterface
私有表达式GetPictureExpression(),其中T:ICommonInterface
如果ComdataFuelDetailVM和ComdataFuelDeleteVM具有相同的属性,则只需为这些类编写包含所有这些属性的公共接口或基类,并在方法中使用以下构造:
private Expression<Func<ComdataFuel, T>> GetPictureExpression<T>() where T : ICommonInterface
私有表达式GetPictureExpression(),其中T:ICommonInterface
私有表达式GetPictureExpression(),其中T:ComdataFuelAbstractVM,new()
要创建T,必须添加new()约束私有表达式GetPictureExpression(),其中T:ComdataFuelAbstractVM,new()
要创建T,您必须添加new()约束,这不是规则。这些类可以有不同的超类,但具有相同的属性。。。另外,如果类有一点不同(即一个属性),我希望有一个灵活的解决方案,etcSo只对它们使用公共接口,而不是公共超类。公共接口将包含这些类共享的所有属性,它将允许以我提供的方式编写泛型方法。接口将增加子类,并增加添加/删除新属性的难度。我不认为有其他方法可以这样做。这不是规则。这些类可以有不同的超类,但具有相同的属性。。。另外,如果类有一点不同(即一个属性),我希望有一个灵活的解决方案,etcSo只对它们使用公共接口,而不是公共超类。公共接口将包含这些类共享的所有属性,它将允许以我提供的方式编写泛型方法。接口将增加子类,并增加添加/删除新属性的困难。我不认为还有其他方法可以做到这一点
private Expression<Func<ComdataFuel, T>> GetPictureExpression<T>() where T: ComdataFuelAbstractVM, new()