2012-03-05 35 views
2

我試圖使用字符串變量的內容來檢查數據庫中是否存在記錄。我正在發送一個方法2參數。這是接收方法:使用本地變量作爲LINQ查詢的一部分

public Boolean recordExists(String targetTable, String data) 
{ 
    //a bunch of Table connections strings are here, example: 
    Table<Road> Roads = db.GetTable<Road>(); 

    //check if the record exists in the table (an integer in this case) 
    var roadQuery = from id in targetTable where id.ID == Convert.ToInt32(data) select id; 
} 

例如,「targetTable」的值可以是「路」,我希望看到如果值「數據」在道路表的ID字段存在數據庫。我將如何創建一個動態的LINQ查詢來執行此操作?

+0

你的意思是「通過手動式」,或「與動態LINQ樣本」,還是......? – 2012-03-05 06:07:05

+0

坦率地說,LINQ並不是真正意圖*支持像'string targetTable'這樣的用法(儘管它可能適用於''(泛型)。你能更清楚的瞭解這個場景嗎? – 2012-03-05 06:09:37

+0

用戶將輸入一個整數到我想然後檢查數據庫,看看這個數字是否存在於某個表的ID字段中,這個表取決於哪個文本框中輸入了一個數字(因此目標表是不同的) – Nords 2012-03-05 06:12:37

回答

2

很簡單哥哥:

public bool recordExists(String targetTable, string fieldName, String data) 
     { 
      return (bool)(db.ExecuteQuery<int>("SELECT COUNT(*) FROM [{0}] WHERE [{1}] = '{2}'", 
       targetTable, fieldName, data).Single() > 0); 
     } 

注意:在SQL偶數場單引號工作是數字。

+0

好的,我得到你要找的東西,請檢查更新 – 2012-03-05 06:16:08

+0

它看起來像現在可能工作我希望嚴格保持我的查詢嚴格在LINQ,但 – Nords 2012-03-05 06:20:49

+0

@Nords如果你想讓你嚴格查詢LINQ,那麼你不能從'string targetTable'開始;這不適用於LINQ。 – 2012-03-05 06:22:46

0

也許是這樣的:

public bool recordExists(String targetTable, string fieldName, String data) 
{ 
     return db.ExecuteQuery<bool>(string.Format(@"SELECT 
           CASE WHEN EXISTS(SELECT NULL FROM [{0}] WHERE [{1}]='{2}') 
            THEN CAST(1 AS BIT) 
            ELSE CAST(0 AS BIT) 
           END",targetTable,fieldName,data)); 
} 
相關問題