尝试从数据库中删除所有匹配项而不仅仅是第一个匹配项。

3

这段代码可以工作,但只能删除数据库中的第一个位置。我对 .Net 框架还比较陌生。我知道我正在使用 FirstOrDefault;但是我不知道如何搜索数据库并删除与要求匹配的所有实例。

MMLeagueParticipant removeThisParticipant = db.ParticipatingKids.FirstOrDefault(i=>i.ParticipantId == ParticipantId && i.sport.sport == SportsTab);
if(removeThisParticipant == null)
{
    Console.WriteLine("removeThisParticopant in [IActionResults Remove] was null");
    return RedirectToAction("Dashboard","Dashboard");
}
if(removeThisParticipant != null)
{
    Console.WriteLine("removeThisParticopant in [IActionResults Remove] was NOT null");
    db.ParticipatingKids.Remove(removeThisParticipant);
    db.SaveChanges();
    return RedirectToAction("Dashboard", "Dashboard");
}

我想做的事情:

我想在数据库中删除所有符合条件的实例。

我尝试过的方法:

  • .Where() 无法隐式转换类型“System.Linq.IQueryable<LeagueProject.Models.MMLeagueParticipant>”为“LeagueProject.Models.MMLeagueParticipant”。

  • .All()。但这会返回一个布尔值

  • .Contains()。也返回了一个布尔值

1个回答

3

您可以使用 Where 替代 FirstOrDefaultCount() 来检查集合。

例如:

IEnumerable<MMLeagueParticipant> removeThisParticipant = db.ParticipatingKids.Where(i=>i.ParticipantId == ParticipantId && i.sport.sport == SportsTab);
if (removeThisParticipant.Count() != 0)
{
     Console.WriteLine("removeThisParticopant in [IActionResults Remove] was NOT null");
     db.ParticipatingKids.RemoveRange(removeThisParticipant);
     db.SaveChanges();
     return RedirectToAction("Dashboard", "Dashboard");   
}
else 
{
    Console.WriteLine("removeThisParticopant in [IActionResults Remove] was null");
    return RedirectToAction("Dashboard","Dashboard");
}

2
首先,第一个调用的返回类型将是 IEnumerable<MMLeagueParticipant>。其次,我会将对 Count() 的调用替换为对 Any() 的调用(检查 IEnumerable.HasNext 是否与实际迭代集合)。第三,您可能希望使用 ToList() 来实现结果的物化,否则查询可能会运行两次。 - orhtej2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接