Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#拉取与ID关联的表的计数_C#_Mysql_Asp.net Mvc - Fatal编程技术网

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术语、var值和计数的行,它将运行。当它们被包括在内时,我得到了上面的错误

还是个新手。任何帮助都会很好

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()
    将所有
    学术术语
    保存到内存中,然后对其进行查询。这也解决了您的额外问题,同时允许更大的灵活性

  • 我真的很欣赏你的洞察力。实现了上面的更改。现在运行它,如果它有效,将给你绿色支票我真的很感激你的洞察力。实现了上面的更改。现在运行它,如果它工作将给你绿色支票