Linq查询删除包含特定匹配编号的所有数据

时间:2015-04-16 16:36:12

标签: c# linq

我的数据库中保存的数据包含pointNumber字段int

我有一个剑道网格,当我点击"删除"按钮,我希望能够删除数据库中pointNumber与该行的pointNumber匹配的行。

到目前为止,我尝试这样的事情:

public ActionResult Delete(PlanningViewParam data)
{
    List<PointData> Points = UserSession.GetValue(
        StateNameEnum.Planning, 
        ScreenName.Planning.ToString() + "Points" + data.ViewType,
        UserSessionMode.Database) as List<PointData>;

    int Number = 1;
    Number = data.Number;

    PointData point = Points.Where( a=> a.pointNumber == Number);
    if (point != null)
    {
       Points.Remove(point);
    }
}

我坚持的部分是这个LINQ查询:

PointData point = Points.Where(a => a.pointNumber == Number);

我收到此错误:

  

无法隐式转换类型   &#39; System.Collections.Generic.IEnumerable&#39;到了PointData&#39;。一个   存在显式转换(您是否错过了演员表)?

这是什么意思,我该如何调整查询?

4 个答案:

答案 0 :(得分:5)

您可以进行一项调整:

Points.RemoveAll( a=> a.pointNumber == Number);

然后你不必获得Where的结果并用它做点什么。

答案 1 :(得分:2)

where方法将返回Enumerable。您需要选择要删除的第一个值

PointData point = Points.Where( a=> a.pointNumber == Number).FirstOrDefault();

或枚举列表并删除for循环

List<PointData> points = Points.Where( a=> a.pointNumber == Number).ToList();

答案 2 :(得分:2)

public ActionResult Delete(PlanningViewParam data)
{
    List<PointData> Points = UserSession.GetValue(
        StateNameEnum.Planning, 
        ScreenName.Planning.ToString() + "Points" + data.ViewType,
        UserSessionMode.Database) as List<PointData>;

    Points=Points.Where(p=>p.pointNumber!=data.Number).ToList();

}

答案 3 :(得分:-1)

听起来像Points.Where( a=> a.pointNumber == Number);正在返回一个集合。试试Points.Where( a=> a.pointNumber == Number).FirstOrDefault();