我想創建一個通用函數來從查詢中提取並將其分配給對象。看來實際的linq2sql對象在通用函數中沒有得到解決,以暴露其中的屬性。Linq2Sql:無法理解是什麼問題
任何幫助,將不勝感激。
public Production GetData()
{
var productionData = new Production();
var query = (from o in _dbContext.ProductionDatas
select new Data<ProductionData>
{
td = _dbContext.ProductionDatas.Where(x => x.Timestamp <= _reportDate).ToList(),
mtd = _dbContext.ProductionDatas.Where(x => x.Timestamp >= _monthStartDate && x.Timestamp <= _reportDate).ToList(),
ytd = _dbContext.ProductionDatas.Where(x => x.Timestamp >= _yearStartDate && x.Timestamp <= _reportDate).ToList(),
today = _dbContext.ProductionDatas.FirstOrDefault(x => x.Timestamp == _reportDate),
}).FirstOrDefault();
AssignValue(productionData, query);
return productionData;
}
public Production GetDiscardedData()
{
var productionData = new Production();
var query = (from o in _dbContext.ProductionDiscardedDatas
select new Data<ProductionData>
{
td = _dbContext.ProductionDiscardedDatas.Where(x => x.Timestamp <= _reportDate).ToList(),
mtd = _dbContext.ProductionDiscardedDatas.Where(x => x.Timestamp >= _monthStartDate && x.Timestamp <= _reportDate).ToList(),
ytd = _dbContext.ProductionDiscardedDatas.Where(x => x.Timestamp >= _yearStartDate && x.Timestamp <= _reportDate).ToList(),
today = _dbContext.ProductionDiscardedDatas.FirstOrDefault(x => x.Timestamp == _reportDate),
}).FirstOrDefault();
AssignValue(productionData, query);
return productionData;
}
private static void AssignValue<T>(Production productionData, Data<T> query) where T : class
{
if (query != null)
{
productionData.Today.Spec1 = query.today.Spec1;
productionData.Today.Spec2 = query.today.Spec2;
productionData.Today.Spec3 = query.today.Spec3;
productionData.MTD.Spec1 = query.mtd.Sum(x => x.Spec1);
productionData.MTD.Spec2 = query.mtd.Sum(x => x.Spec2);
productionData.MTD.Spec3 = query.mtd.Sum(x => x.Spec3);
productionData.YTD.Spec1 = query.ytd.Sum(x => x.Spec1);
productionData.YTD.Spec2 = query.ytd.Sum(x => x.Spec2);
productionData.YTD.Spec3 = query.ytd.Sum(x => x.Spec3);
productionData.TD.Spec1 = query.td.Sum(x => x.Spec1);
productionData.TD.Spec2 = query.td.Sum(x => x.Spec2);
productionData.TD.Spec3 = query.td.Sum(x => x.Spec3);
}
}
public class Data<T>
{
public List<T> mtd;
public List<T> ytd;
public T today;
public List<T> td;
}
但我有一些其他的L2S類具有類似的屬性名稱,這是我想分開值的分配的原因之一。例如。我有一個類 - ProductionData,ProductionDataRenewed,ProductionDataDiscarded等。所有這些L2S類都有3個類似的屬性Spec1,Spec2,spec3。我有更多的功能類似於GetData – Dilberted
我已經更新了代碼示例。我希望現在會更清楚。 :) – Dilberted
@Dilberted「有相似的名字」不是通用的。但是,在這種情況下,另一個選項將出現 - 將被編輯。 –