如果数据存在,如何更新列表类数据

时间:2013-09-09 07:27:14

标签: c# asp.net list

我创建了一个List类,我将在其中添加一些数据。我的要求是,如果数据退出它将更新数据,如果没有,那么它将添加数据。我尝试了一些代码,但它给出了一个错误。

public class Subject
{
    public string m_SubjectId { get; set; }
    public double m_Marks { get; set; }
    public double m_NegativeMarks { get; set; }
    public double m_TotalMarks { get; set; }


    public void AddSubjectDeatils(string SubjectId, double Marks, double NegativeMark)
    {
        List<Subject> lst = new List<Subject>();
        var temp = lst.Single(l => l.m_SubjectId == SubjectId);
        if (temp != null)
        {
            temp.m_Marks += Marks;
            temp.m_NegativeMarks += NegativeMark;
            temp.m_TotalMarks += Marks;                
        }
        else
        {
            m_SubjectId = SubjectId;
            m_Marks = Marks;
            m_NegativeMarks = NegativeMark;
            m_TotalMarks = Marks;                
        }
    }
}

错误是:序列不包含匹配元素

3 个答案:

答案 0 :(得分:1)

var temp = lst.Single(l => l.m_SubjectId == SubjectId);

使用SingleOrDefault代替(或FirstOrDefault应该足够),如果您想要一个或没有结果。

使用Single

if (temp != null)... else

没有意义,因为如果没有结果,在访问此测试之前会引发Exception

顺便说一句,lst应该是您方法的参数,或者是对另一个方法的调用的返回值。

原样:

List<Subject> lst = new List<Subject>();
var temp = lst.Single(l => l.m_SubjectId == SubjectId);

你永远不会得到任何东西(你在每次调用方法时创建一个空列表)

答案 1 :(得分:1)

每次调用该方法时,您都会创建新的List<Subject>。我认为这不正确。

您还应该使用SingleOrDefault代替Single来防止它抛出异常。

答案 2 :(得分:1)

在Main方法中声明List并将其作为参数传递给AddSubjectDetails函数

public void AddSubjectDeatils(string SubjectId, double Marks, double NegativeMark,List<Subject> listofsubjects)
    {

        var temp = listofsubjects.SingleorDefault(l => l.m_SubjectId == SubjectId);
        if (temp != null)
        {
            temp.m_Marks += Marks;
            temp.m_NegativeMarks += NegativeMark;
            temp.m_TotalMarks += Marks;
        }
        else
        {
            m_SubjectId = SubjectId;
            m_Marks = Marks;
            m_NegativeMarks = NegativeMark;
            m_TotalMarks = Marks;
        }
    }