从DataTable中选择两列之间的记录

时间:2016-04-21 07:23:32

标签: c# asp.net

我在Google上搜索过但没有找到任何解决方案。拜托,有人帮帮我。

问题:

我在ID中有三列:Value1Value2Datatable

DataTable看起来像这样:

ID   Value1   Value2
1      10       20
2      15       30 

我想找到某个范围之间的数据。让我通过展示一个例子来澄清:

如果我输入值15到30,则不应该允许它,因为15已经存在于10到20之间。

这是我编写的代码,如果我再次输入相同的值,那么我将收到消息:

bool inRange = dtCurrentTable.AsEnumerable()
    .Any(row => Convert.ToInt32(drCurrentRow["Value1"]) == row.Field<Int32<("Value1")
             && Convert.ToInt32(drCurrentRow["Value2"]) == row.Field<Int32>("Value2"));
if (inRange)
{
    //msg
}

那么,如上所述,我如何编写代码来完成我的任务?

3 个答案:

答案 0 :(得分:2)

只需将==替换为>=<=

if (dtCurrentTable.AsEnumerable().Any(row =>
      (
      Convert.ToInt32(drCurrentRow["Value1"]) <= row.Field<Int32>("Value1") && 
      Convert.ToInt32(drCurrentRow["Value2"]) >= row.Field<Int32>("Value1")
      ) 
      ||
      ( 
      Convert.ToInt32(drCurrentRow["Value1"]) <= row.Field<Int32>("Value2") && 
      Convert.ToInt32(drCurrentRow["Value2"]) >= row.Field<Int32>("Value2")
      ) 
   )
  {
   //  value1 or value2 falls within an already existing range 
  }

答案 1 :(得分:2)

您最好使用一个简单的循环来检查给定值是否显示在现有行中。它就像是;

foreach (DataRow row in dt.Rows)
        {
            int val1 = Convert.ToInt32(row["Value1"]);
            int val2 = Convert.ToInt32(row["Value2"]);

            if (someValue>=val1 && someValue<=val2)
            {
                // do not insert
            }
        }

答案 2 :(得分:1)

因此,您有一个DataRow,其中包含两个值v1和v2,并且您希望查看DataTable是否已包含row.Value1 <= v1row.Value2 > v1或{{1}的行}和row.Value1 < v2

row.Value2 >= v2