2016-04-21 33 views
1

我在Google上搜索過但沒有找到任何解決方案。請,任何人都幫助我。從DataTable中選擇兩列之間的記錄

問題:

我有三列:ID,在DatatableValue1Value2

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 
} 

所以,我怎麼寫代碼來實現我的任務,我上面已經解釋呢?

+1

什麼意思「如果我輸入15到30」?用戶輸入兩個數字?查詢中的這兩個變量在哪裏? 'drCurrentRow'是另一個DataRow嗎?你想比較兩個DataTables嗎?根本不清楚。 –

回答

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 
    } 
+0

非常感謝,非常感謝... –

+0

很高興能幫到您:-) –

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 
      } 
     } 
+0

非常感謝,真的很讓您滿意。 –

1

讓您擁有一個DataRow有兩個值v1和v2,你想看看如果DataTable已經包含行,其中row.Value1 <= v1row.Value2 > v1row.Value1 < v2row.Value2 >= v2

int v1 = row.Field<int>("Value1"); 
int v2 = row.Field<int>("Value2"); 

var inRangeRows = from r in dtCurrentTable.AsEnumerable() 
        where (r.Field<Int32>("Value1") <= v1 && r.Field<Int32>("Value2") > v1) 
        || (r.Field<Int32>("Value1") < v2 && r.Field<Int32>("Value2") >= v2) 
        select r; 

bool inRange = inRangeRows.Any(); 
+0

非常感謝,現在概念非常清楚。 –