C#拉取与ID关联的表的计数
您好,我有两张表,如下所示: 周期值C#拉取与ID关联的表的计数,c#,mysql,asp.net-mvc,C#,Mysql,Asp.net Mvc,您好,我有两张表,如下所示: 周期值 Id(主键) 名字 描述 起始日期 结束日期 ActiveFlg 学术术语 Id(主键) 年份Id(FK) 名字 开始日期 结束日期 目标是提取与每个期间值关联的项的计数。这是我这样做的代码 public async Task<PeriodValueDTO> GetSchoolYearPeriodValueDTOById (int periodValueId) { var value = await Db.PeriodValues
- Id(主键)
- 名字
- 描述
- 起始日期
- 结束日期
- ActiveFlg
- Id(主键)
- 年份Id(FK)
- 名字
- 开始日期
- 结束日期
public async Task<PeriodValueDTO> GetSchoolYearPeriodValueDTOById (int periodValueId)
{
var value = await Db.PeriodValues.FindAsync(periodValueId);
return new PeriodValueDTO()
{
id = periodValueId,
Name = value.Name,
StartDate = value.Date.ToShortDateString(),
EndDate = value.EndDate.ToShortDateString(),
Description = value.Description
};
}
公共异步任务GetSchoolYearPeriodValueDTOById(int periodValueId)
{
var value=await Db.PeriodValues.FindAsync(periodValueId);
将新的PeriodValueDTO()返回到
{
id=周期值id,
Name=value.Name,
StartDate=value.Date.ToSortDateString(),
EndDate=value.EndDate.ToShortDateString(),
Description=值。Description
};
}
此方法调用上面的方法
public async Task<List<PeriodValueDTO>> GettAllPeriodValueDTOsByType(int periodTypeId)
{
var toReturn = new List<PeriodValueDTO>();
var pvs = await Db.PeriodValues.Where(x => x.PeriodTypeId == periodTypeId).ToListAsync();
var pvIds = pvs.Select(x => x.Id).ToList();
var periodPeriodVal = await Db.Period_PeriodValue.Where(x => pvIds.Contains(x.PeriodValueId)).ToListAsync();
foreach (var ppv in periodPeriodVal)
{
var periodValue = pvs.FirstOrDefault(x => x.Id == ppv.PeriodValueId);
var value = await GetSchoolYearPeriodValueDTOById(periodTypeId);
var rightId = value.id; //Added this
var terms = Db.AcademicTerms.Where(x => x.YearId == rightId).ToArray(); //Changed This
var dto = new PeriodValueDTO()
{
id = periodValue.Id,
Name = periodValue.Name,
StartDate = periodValue.Date.ToShortDateString(),
EndDate = periodValue.EndDate.ToShortDateString(),
Description = periodValue.Description,
Count = terms.Length //Changed this
};
toReturn.Add(dto);
};
return toReturn;
}
公共异步任务GettAllPeriodValueDTOsByType(int-periodTypeId)
{
var toReturn=新列表();
var pvs=await Db.PeriodValues.Where(x=>x.PeriodTypeId==PeriodTypeId.toListSync();
var pvIds=pvs.Select(x=>x.Id).ToList();
var periodVal=await Db.Period_PeriodValue.Where(x=>pvIds.Contains(x.PeriodValueId)).toListSync();
foreach(期间var ppv)
{
var periodValue=pvs.FirstOrDefault(x=>x.Id==ppv.PeriodValueId);
var值=等待GetSchoolYearPeriodValueDTOById(periodTypeId);
var rightId=value.id;//添加了这个
var terms=Db.AcademicTerms.Where(x=>x.YearId==rightId).ToArray();//更改了此项
var dto=新的周期值dto()
{
id=periodValue.id,
Name=periodValue.Name,
StartDate=periodValue.Date.ToSortDateString(),
EndDate=periodValue.EndDate.ToShortDateString(),
Description=周期值。Description,
Count=terms.Length//更改了此设置
};
toReturn.Add(dto);
};
回归回归;
}
然而,我得到了这个错误:
- 加载资源失败:服务器响应状态为500(内部服务器错误)
- 错误:解析失败,原因是
,但没有为段[object object]
学年提供
resolvefiled
var value = await GetSchoolYearPeriodValueDTOById(periodTypeId);
应该是:
var value = await GetSchoolYearPeriodValueDTOById(periodValue.Id);
没有
应该是:
var value = await GetSchoolYearPeriodValueDTOById(periodValue.Id);
否?可能是因为这一行:
var terms = Db.AcademicTerms.Where(x => x.YearId == value.id);
在这里,您试图生成一个要转换为SQL并在数据库上执行的表达式(因为Db.AcademicTerms
是IQueryable
)。您没有在内存中执行此查询。查询解析器尝试将值
转换为SQL参数,但失败,因为它不是基本对象。所以你有两个选择:
value.id
保存到单独的变量中,然后在查询中使用该变量,或者更好:.ToArray()
将所有学术术语
保存到内存中,然后对其进行查询。这也解决了您的额外问题,同时允许更大的灵活性可能是因为这一行:
var terms = Db.AcademicTerms.Where(x => x.YearId == value.id);
在这里,您试图生成一个要转换为SQL并在数据库上执行的表达式(因为Db.AcademicTerms
是IQueryable
)。您没有在内存中执行此查询。查询解析器尝试将值
转换为SQL参数,但失败,因为它不是基本对象。所以你有两个选择:
value.id
保存到单独的变量中,然后在查询中使用该变量,或者更好:.ToArray()
将所有学术术语
保存到内存中,然后对其进行查询。这也解决了您的额外问题,同时允许更大的灵活性我真的很欣赏你的洞察力。实现了上面的更改。现在运行它,如果它有效,将给你绿色支票我真的很感激你的洞察力。实现了上面的更改。现在运行它,如果它工作将给你绿色支票