Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# foreach DataTable行在第二列选择唯一_C#_Foreach_Datatable_Datarow - Fatal编程技术网

C# foreach DataTable行在第二列选择唯一

C# foreach DataTable行在第二列选择唯一,c#,foreach,datatable,datarow,C#,Foreach,Datatable,Datarow,我不太确定我该如何写我的问题..但是我在如何从DataTable中为mysql编写更新字符串以供以后使用方面遇到了麻烦 数据: 代码: 使用(StreamWriter sw=newstreamwriter(File.Open(“update\u itemtype\u name.txt”,FileMode.Create))) { foreach(数据行中的数据行) { sw.WriteLine(“更新项目类型集名称=”+“行[1]+”,其中id>=”+行[0]+“id您可以使用LINQ的Group

我不太确定我该如何写我的问题..但是我在如何从DataTable中为mysql编写更新字符串以供以后使用方面遇到了麻烦

数据:

代码:

使用(StreamWriter sw=newstreamwriter(File.Open(“update\u itemtype\u name.txt”,FileMode.Create)))
{
foreach(数据行中的数据行)
{

sw.WriteLine(“更新项目类型集名称=”+“行[1]+”,其中id>=”+行[0]+“id您可以使用LINQ的
GroupBy
,但要做到这一点,您首先需要使用
of type
方法扩展方法获得数据行的
IEnumerable
。还请注意
OrderBy
-以便在数据表排序不正确的情况下实际获得正确的结果:

var rowGroups = dt.Rows.OfType<DataRow>().OrderBy(r => r["id"]).GroupBy(r => r["Name"]);

foreach(var rowGroup in rowGroups)
{
    var strUpdate = "UPDATE itemtype SET name = '"+ 
                     rowGroup.Key +
                     "' WHERE id >= "+ rowGroup.First()["id"].ToString() + 
                     " AND id <= "+ rowGroup.Last()["id"].ToString();
}
您将获得以下结果:

UPDATE itemtype SET name = 'SWORD' WHERE id >= 1 AND id <= 6
UPDATE itemtype SET name = 'KNIFE' WHERE id >= 4 AND id <= 5

你为什么期望得到这个结果?你当前的结果正是你的代码期望得到的结果。另外,如果表中每行包含不同的
Name
值会怎么样?这就是为什么我在这里问这个问题。很抱歉,我不熟悉这个问题。如果第5个条目id=5 Name=HORSE,那么它应该也可以“更新itemtype SET name='HORSE',其中id>=5和id hi,谢谢您的回答。在您的演示中。如果我将第二把刀(6)更改为剑,它将忽略刀(5),因此结果将变为“id>=1和id=1,id和我的id不是一个连续的数字1->20k,因为它会像示例1-5那样断开,然后是10-12、14-20等等..我实际上已经开始在我的答案中解决这个问题了。很快将有一个演示。
UPDATE itemtype SET name = 'SWORD' WHERE id >= 1 AND id <= 1;
UPDATE itemtype SET name = 'SWORD' WHERE id >= 2 AND id <= 2;
UPDATE itemtype SET name = 'SWORD' WHERE id >= 3 AND id <= 3;
UPDATE itemtype SET name = 'SWORD' WHERE id >= 4 AND id <= 4;
UPDATE itemtype SET name = 'HORSE' WHERE id >= 5 AND id <= 5;
UPDATE itemtype SET name = 'SWORD' WHERE id >= 6 AND id <= 6;
UPDATE itemtype SET name = 'SWORD' WHERE id >= 1 AND id <= 4;
UPDATE itemtype SET name = 'HORSE' WHERE id >= 5 AND id <= 5;
UPDATE itemtype SET name = 'SWORD' WHERE id >= 6 AND id <= 6;
var rowGroups = dt.Rows.OfType<DataRow>().OrderBy(r => r["id"]).GroupBy(r => r["Name"]);

foreach(var rowGroup in rowGroups)
{
    var strUpdate = "UPDATE itemtype SET name = '"+ 
                     rowGroup.Key +
                     "' WHERE id >= "+ rowGroup.First()["id"].ToString() + 
                     " AND id <= "+ rowGroup.Last()["id"].ToString();
}
1, "SWORD"
2, "SWORD"
3, "SWORD"

4, "KNIFE"
5, "KNIFE"

6, "SWORD"
UPDATE itemtype SET name = 'SWORD' WHERE id >= 1 AND id <= 6
UPDATE itemtype SET name = 'KNIFE' WHERE id >= 4 AND id <= 5
var rowGroups = dt.Rows.OfType<DataRow>().OrderBy(r => r["id"]).GroupBy(r => r["Name"]);

foreach(var rowGroup in rowGroups)
{
    var strUpdate = "UPDATE itemtype SET name = '"+ rowGroup.Key +"' WHERE id IN(";

    foreach(var row in rowGroup)
    {
        strUpdate += row["id"].ToString() +",";
    }
    strUpdate = strUpdate.TrimEnd(',') +")";
}