自己寫的皮膚為了好看只取了Text沒有Value,現在用這個方法解決一下只有Text取Value值不方便的方式
你只要有一個查詢這個表中所有數據的方法就可以了當然也可以只返回這兩列
代碼
/// <summary>
/// 根據欄目欄目名稱獲取索引
/// </summary>
/// <param name="fiId">欄目名稱</param>
/// <returns>欄目索引</returns>
PRivate string GetFunctionNameByName(string Name)
{
var result = this.objWSM.GetFunctionInfo().AsEnumerable().Where(f1 => f1["fiName"].ToString().Trim() == Name.ToString().Trim()).FirstOrDefault();
return result["fiId"].ToString();
}
GetFunctionInfo是一個查詢表中所有信息的方法
/// <summary>
/// 根據欄目索引獲取欄目名稱
/// </summary>
/// <param name="fiId">欄目索引</param>
/// <returns>欄目名稱</returns>
private string GetFunctionNameById(int fiId)
{
var result = this._fiTable.AsEnumerable().Where(fi => Convert.ToInt32(fi["fiId"]) == fiId).FirstOrDefault();
return result["fiName"].ToString();
}
兩個方法是對應的,感覺這樣查詢方便不少,直接在前台就可以完成,跟數據庫連接的時候只要一個查詢所有的方法就可以了
來解釋一下這一步吧
this.objWSM.GetFunctionInfo().AsEnumerable().Where(f1 => f1["fiName"].ToString().Trim() == Name.ToString().Trim()).FirstOrDefault();
this.objWSM.GetFunctionInfo()是一個查詢所有的方法
AsEnumerable().Where()反回的是一個泛型的行,可以用LinQ表達式查詢
f1 => f1["fiName"].ToString().Trim() == Name.ToString().Trim())Linq表達式
F1是新生成的一個行的名稱
f1["fiName"].當然就是這個行裡的列名了,=>後面是條件前面是集合
f1["fiName"].ToString().Trim() == Name.ToString().Trim()就表達在這個行裡有這兩個值相等的,就取出來
FirstOrDefault();表示取第一行的意思
到這裡問題差不多都解決了,只要一個查詢這兩列的方法,在前台寫上這樣兩個方法,每次調用就OK了,不用專門的寫兩個訪問數據庫的方法,感覺還是很方便的。