문제

LINQ 쿼리를 사용하여 한 줄에 DataTable의 두 열을 업데이트하고 싶습니다.현재 동일한 작업을 수행하기 위해 다음 두 줄을 사용하고 있습니다.

oldSP.Select(string.Format("[itemGuid] = '{0}'", itemGuid)).ToList<DataRow>().ForEach(r => r["startdate"] = stDate);
oldSP.Select(string.Format("[itemGuid] = '{0}'", itemGuid)).ToList<DataRow>().ForEach(r => r["enddate"] = enDate);

한 줄을 사용하여 이 작업을 한 줄로 어떻게 수행할 수 있습니까? Select?

도움이 되었습니까?

해결책

하나의 '줄'으로 수행 할 수 있고, 적절한 조치 대의원을 Foreach 메소드로 전달할 수 있습니다.

oldSP.Select(string.Format("[itemGuid] = '{0}'", itemGuid))
     .ToList<DataRow>()
     .ForEach(r => { 
        r["startdate"] = stDate;
        r["enddate"] = enDate;
      });

또한 LINQ에서 데이터 세트를 사용할 수 있습니다 (1 라이너보다 나에게 더 읽을 수 있습니다) :

var rowsToUpdate = 
    oldSP.AsEnumerable().Where(r => r.Field<string>("itemGuid") == itemGuid);

foreach(var row in rowsToUpdate)
{
    row.SetField("startdate", stDate);
    row.SetField("enddate", enDate);
}

다른 팁

추가 작업에서 두 ​​가지 작업을 수행하려면 중괄호를 사용하세요.

oldSP.Select(string.Format("[itemGuid] = '{0}'", itemGuid))
       .ToList<DataRow>()
       .ForEach(r => { r["enddate"] = enDate); r["startdate"] = stDate; });

하지만 코드 가독성을 위해 구식을 사용하겠습니다. foreach 고리.

이 시도 :

oldSP.Select(string.Format("[itemGuid] = '{0}'", itemGuid)).ToList<DataRow>()
     .ForEach(r => { r["startdate"] = stDate; r["enddate"] = enDate; });

웹에서 본 예제가 마음에 들지 않았으므로 여기 내 예입니다.

        DataTable dt = new DataTable();
        dt.Columns.Add("Year");
        dt.Columns.Add("Month");
        dt.Columns.Add("Views");
        for (int year = 2011; year < 2015; year++)
        {
            for (int month = 1; month < 13; month++)
            {
                DataRow newRow = dt.NewRow();
                newRow[0] = year;
                newRow[1] = month;
                newRow[2] = 0;
                dt.Rows.Add(newRow);
            }
        }

        dataGridView1.DataSource = dt;

        //if using Lambda 
        //var test = dt.AsEnumerable().Where(x => x.Field<string>("Year") == "2013" && x.Field<string>("Month") == "2").ToList();

        var test = (from x in dt.AsEnumerable()
                    where x.Field<string>("Year") == "2013"
                    where x.Field<string>("Month") == "2"
                    select x).ToList();


        test[0][0] = "2015";

        dt.AcceptChanges();

// SQL에 쓰기 Dt.SubMitchanges () 대신 사용하는 경우

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top