簡體   English   中英

如何在數據行上使用 linq 的字段 select

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM