我在Google上搜索过但没有找到任何解决方案。拜托,有人帮帮我。
问题:
我在ID
中有三列:Value1
,Value2
和Datatable
。
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
}
那么,如上所述,我如何编写代码来完成我的任务?
答案 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 <= v1
和row.Value2 > v1
或{{1}的行}和row.Value1 < v2
?
row.Value2 >= v2