쿼리에서 추출하여 개체에 할당하는 제네릭 함수를 만들려고합니다. 실제 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 클래스가 있는데, 그 이유 중 하나는 값 할당을 분리하려고했던 이유 중 하나입니다. 예를 들면. 나는 ProductionDataRenewed, ProductionDataDiscarded 등의 클래스를 가지고있다.이 L2S 클래스들은 모두 3 개의 유사한 특성 인 Spec1, Spec2, Spec3을 가지고있다. GetData와 비슷한 몇 가지 기능이 있습니다. – Dilberted
코드 샘플을 업데이트했습니다. 나는 그것이 지금 더 명확 할 것이기를 바란다. :) – Dilberted
@Dilberted "비슷한 이름을 가짐"은 일반적인 것이 아닙니다. 그러나 그 시나리오에서 또 다른 옵션이 제시됩니다 - 편집합니다. –