[英]How to select a field with linq on datarow
我有這個 linq 查詢:
string title = from DataRow r in (OleDB.DataItems.Tables[0]).Rows
select r.Title;
我想提取行上的字段標題(來自數據庫)(行將是 1,而不是更多,所以我放在一個字符串而不是字符串 [] 中。
我該怎么做?
VStudio表示DataRow不包含Title的定義,但數據庫中存在Title字段。
我很困惑:)
正如 Frédéric Hamidi 所說,您不需要 LINQ。
但是,如果您仍然想這樣做(矯枉過正)並且您知道始終有一個單行表,請執行以下操作:
DataSet data = new DataSet();
var table = (from a in data.Tables.Cast<DataTable>() select a).Single();
var row = (from a in table.Rows.Cast<DataRow>() select a).Single();
String title = row.Field<String>("Title");
或者
DataSet data = new DataSet();
var table = (from a in data.Tables.Cast<DataTable>() select a).SingleOrDefault();
var row = (from a in table.Rows.Cast<DataRow>() select a).SingleOrDefault();
String title = row.Field<String>("Title");
我使用了DataSet
,因為我不知道您的 object 的結構。
您不需要 LINQ 因為您只想獲取集合中第一行的Title
字段:
string title = OleDB.DataItems.Tables[0].Rows[0]["Title"];
嘗試
string title = (from DataRow r in (OleDB.DataItems.Tables[0]).Rows
select r.Title).First();
Linq 返回一個可枚舉的集合,因為它不知道只有一項。 調用 First 方法將返回查詢中的第一項。
編輯:等等,我公然錯過了你最初提到的問題(但你仍然需要上面的)!
數據行包含字段,而不是屬性本身。 你需要做的是
select r.Field<string>("Title")
所以你的整個查詢將是
string title = (from DataRow r in (OleDB.DataItems.Tables[0]).Rows
select r.Field<string>("Title")).First();
最好使用 FirstOrDefault,以防沒有行:
string title = (from DataRow r in (OleDB.DataItems.Tables[0]).Rows
select r.Title).FirstOrDefault();
通常,如果您需要執行此類操作,您會將 DataRow object 轉換為與數據庫中的表相對應的強類型 object。
我假設有一個包含字段“標題”的 class“書”:
Book selectedBook = (Book) from DataRow r in (OleDB.DataItems.Tables[0]).Rows[0]
string sTitle = selectedBook.Title;
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.