InvalidOperationException:序列不包含任何元素。在 Asp.net 核心 MVC 中 Entity framework

InvalidOperationException: Sequence contains no elements. In Asp.net Core MVC with Entity framework

我在我的一个项目中遇到了这个错误。

InvalidOperationException: Sequence contains no elements.

这是我的代码,我正在尝试使用字符串格式创建自动生成的 ID。

 public async Task<IActionResult> Create()
    {
        int id = _db.Patient.Max(item => item.Id)+1;

        ViewBag.autoid = "BL0000"+id.ToString(); 
        return View();
    }

如果序列不包含任何元素,max 方法将抛出 InvalidOperation 异常。 - https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.max?view=netframework-4.8

您可以使用一些像这样的扩展方法 -

public static T MaxOrEmpty<T>(this IQueryable<T> query)
{
    return query.DefaultIfEmpty().Max();
}

InvalidOperationException: Sequence contains no elements.

如错误信息所说,你的Patient中没有这样的元素。所以你需要判断它是否包含item。

试试这个:

var data = _db.Patient.Select(item => item.Id);
if(data.Count()==0)
{
    int id = 1; 
}
else
{
    int id = data.Max() + 1;
}

我解决了这个问题

public async Task<IActionResult> Create()
    {
        //x = _db.Patient.Max(item => item.Id);
        x=_db.Patient.DefaultIfEmpty().Max(item => item == null ? 1 : item.Id+1);


        ViewBag.autoid = "BL0000"+x.ToString(); 
        return View();
    }