Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# c LINQ)如何删除数据表中与列表和特定值匹配的行?_C#_Linq_List_Datatable - Fatal编程技术网

C# c LINQ)如何删除数据表中与列表和特定值匹配的行?

C# c LINQ)如何删除数据表中与列表和特定值匹配的行?,c#,linq,list,datatable,C#,Linq,List,Datatable,我有数据表,数据如下: Couponid STATE 20160406000033 A 20160406000051 A <--- I don't want this row 20160406000051 K 20160406000051 K 我有一张优惠券,包括20160406000051 现在,我只想复制整个数据表,不包括与列表匹配且同时具有“A”值的行。 如果Couponid与列表匹配且值为“K”,则它必须保留在D

我有数据表,数据如下:

Couponid       STATE

20160406000033     A  
20160406000051     A     <--- I don't want this row
20160406000051     K   
20160406000051     K  
我有一张优惠券,包括20160406000051

现在,我只想复制整个数据表,不包括与列表匹配且同时具有“A”值的行。 如果Couponid与列表匹配且值为“K”,则它必须保留在DataTable中

换一种说法,

在处理每一行时

如果一行不属于该列表,则该行必须保留在DataTable中

但是,如果一行属于列表,并且该行具有“a”值,则必须排除该行,但属于列表且具有“K”值的其他行必须保留在DataTable中

我使用了一对循环来实现这一点,但它花费了太多的时间

我认为下面的代码将数据表划分为是否属于列表的行,而我需要同时属于列表的行和不属于列表的行

IEnumerable<DataRow> rows_query = from r in dt.AsEnumerable()
                                  where !list_coupon.Contains(r.Field<string>("Couponid")) &&
                                  r.Field<string>("STATE") != "A"
                                  select r;

dt = rows_query.CopyToDataTable();
非常感谢您的宝贵意见


非常感谢你

从你的解释中,我了解到你想要的是列表中没有的每一行,或者列表中的每一行,但是它们的值不同于A

您需要在linq | |中使用or运算符


检查是否有行是很好的,因为如果linq没有返回任何行,CopyToDataTable将引发异常。

因此根据您的解释,我理解您想要列表中没有的或列表中的但值与A不同的每一行

您需要在linq | |中使用or运算符


最好检查是否有行,因为如果linq没有返回行,CopyToDataTable将引发异常。

只需将查询更改为

  IEnumerable<DataRow> rows_query = from r in dt.AsEnumerable()
                              where !(list_coupon.Contains(r.Field<string>("Couponid")) &&
                              r.Field<string>("STATE") == "A")
                              select r;

  dt = rows_query.CopyToDataTable();
不要让not操作员同时接触这两个部件,这样它将顺利工作


希望它能帮助您。

只需将查询更改为

  IEnumerable<DataRow> rows_query = from r in dt.AsEnumerable()
                              where !(list_coupon.Contains(r.Field<string>("Couponid")) &&
                              r.Field<string>("STATE") == "A")
                              select r;

  dt = rows_query.CopyToDataTable();
不要让not操作员同时接触这两个部件,这样它将顺利工作


希望对您有所帮助。

如果答案对您有效,请接受答案。@Viplock,有些事情很奇怪…我正在分析。。请等待如果答案对您有效,请接受答案。@Viplock,有些事情很奇怪…我正在分析。。请等待非常感谢您分享您的精彩知识!很好用!此外,您能否提供SQL语句,该语句对删除属于列表且具有值“A”的行具有相同的意义?@KayLee堆栈溢出的策略是每个帖子问一个问题。问另一个问题,有人会回答你。非常感谢分享你的优秀知识!很好用!此外,您能否提供SQL语句,该语句对删除属于列表且具有值“A”的行具有相同的意义?@KayLee堆栈溢出的策略是每个帖子问一个问题。问另一个问题,有人会回答你。我还想对你的渊博知识表示深深的感谢。请让我明白,两个答案都是正确的,但另一个答案早就提供了。此外,请您提供SQL语句,如果行属于列表并具有值“A”,则该语句对删除行具有相同的意义。这很好,我不要求接受我的答案。我要求接受任何恰当的、令你满意的回答我还想对您的卓越知识表示深深的感谢。请您理解两个答案都是正确的,但另一个答案是在前面提供的。此外,如果属于列表并具有值“A”,您能否提供SQL语句,该语句对删除行具有相同的意义?这非常好,我没有要求接受我的回答。我要求接受任何恰当的、令你满意的回答