开发者

How to select a field with linq on datarow

开发者 https://www.devze.com 2023-03-16 12:48 出处:网络
I have this linq query : string title = from DataRow r in (OleDB.DataItems.Tables[0]).Rows select r.Title;

I have this linq query :

string title = from DataRow r in (OleDB.DataItems.Tables[0]).Rows
select r.Title;

and I'd like to extract the field Title (from Database) on the row (rows will be 1, not mo开发者_如何学运维re, so that's I put on a string and not in a string[].

How can I do it?

VStudio says that DataRow doesnt contain the definition of Title, but the field Title exist on the database.

I making confusion :)


As Frédéric Hamidi said, you don't need LINQ.

However, if you still want to do it that way (overkill) and you know that there is always a single table with a single row, do:

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");

or

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");

I used a DataSet because I don't know how your object is structured.


You don't need LINQ since you only want to fetch the Title field of the first row in the collection:

string title = OleDB.DataItems.Tables[0].Rows[0]["Title"];


try

string title = (from DataRow r in (OleDB.DataItems.Tables[0]).Rows
    select r.Title).First();

Linq returns an enumerable collection as it doesn't know there will be only one item. Calling the First method will return the first item from the query.

Edit: Hang on, I have blatantly missed the problem you originally mentioned (but you'll still need the above)!

A data row contains fields, not properties as such. What you'll need to do is

select r.Field<string>("Title")

So your entire query will be

string title = (from DataRow r in (OleDB.DataItems.Tables[0]).Rows
    select r.Field<string>("Title")).First();


It's better to use FirstOrDefault, in case there are no rows:

string title = (from DataRow r in (OleDB.DataItems.Tables[0]).Rows
    select r.Title).FirstOrDefault();


Usually, if you need to perform such an action, you would cast the DataRow object to your strongly typed object corresponding with the table in your database.

I assume there is a class "Book" which contains the field "Title":

Book selectedBook = (Book) from DataRow r in (OleDB.DataItems.Tables[0]).Rows[0]
string sTitle = selectedBook.Title;

Hope this helps.

0

精彩评论

暂无评论...
验证码 换一张
取 消