1
我有類似LINQ實體請求:LINQ實體類似的代碼
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具有相同的屬性(但用作視圖模型不同的視圖):
public abstract class ComdataFuelAbstractVM
{
public int ID { get; set; }
public int? CompanyId { get; set; }
public string TruckNo { get; set; }
public int? DriverId { get; set; }
[Display(Name = "Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime TransDate { get; set; }
public string TransTime { get; set; }
public string DriverName { get; set; }
public string UnitNo { get; set; }
public string City { get; set; }
public string State { get; set; }
public string TruckStopCode { get; set; }
public string TruckStopName { get; set; }
public string TruckStopInvoiceNo { get; set; }
public decimal? NoOfGal { get; set; }
[DisplayFormat(DataFormatString = "{0:C3}")]
public decimal? GalPrice { get; set; }
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal? TotalCost { get; set; }
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal? Fees { get; set; }
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal? Rebate { get; set; }
[Display(Name = "Rebate")]
[DisplayFormat(DataFormatString = "{0:c}")]
public decimal? PayoutRebate { get; set; }
public string CardNo { get; set; }
public string EmployeeNo { get; set; }
public bool? OwnerOp { get; set; }
}
public class ComdataFuelDetailVM : ComdataFuelAbstractVM
{
}
public class ComdataFuelDeleteVM : ComdataFuelAbstractVM
{
}
任何想寫的方法,它返回像這樣的表達式:
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;
}
,但我不能創建T類型的對象......
這不是一個規則噸。這些類可以有不同的超類,但具有相同的屬性...此外,如果類有一點區別(即一個屬性)等,我想有一個靈活的解決方案。 –
因此,只爲他們使用通用接口,而不是普通的超類。通用接口將包含這些類共享的所有屬性,並允許按照我提供的方式編寫通用方法 –
接口將增加子類並增加添加/刪除新屬性的難度。 –