Frage

Ich möchte zwei Spalten von DataTable in einer einzelnen Zeile mit der LINQ -Abfrage aktualisieren. Derzeit verwende ich folgende zwei Zeilen, um dasselbe zu tun:

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);

Wie kann ich das in einer Zeile tun, indem ich eins benutze? Select?

War es hilfreich?

Lösung

Sie können dies in einer "Linie" tun. Übergeben Sie einfach einen geeigneten Aktionsdelegierten an die Methode:

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

Sie können auch LINQ zum Datensatz verwenden (sieht für mich lesbarer als ein Liner):

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

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

Andere Tipps

Verwenden Sie Curly Bracer, um zwei für weitere Operationen zu tun:

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

Aber für die Code-Lesbarkeit würde ich altmodisch verwenden foreach Schleife.

Versuche dies :

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

Ich mochte keine der Beispiele, die ich im Web gesehen habe, also hier ist mein Beispiel

        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();

// Wenn das Schreiben in SQL stattdessen dt.subMitchanges () verwendet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top