2008-10-09 9 views
1

Considérez ceci:LINQ to SQL: DataTable.Rows [0] [ "ColumnName"] équivalent

var query = from r in this._db.Recipes 
      where r.RecipesID == recipeID 
      select new { r.RecipesID, r.RecipesName }; 

Comment puis-je obtenir des colonnes individuelles dans mon objet query sans utiliser une boucle for?

Fondamentalement: comment puis-je traduire DataTable.Rows[0]["ColumnName"] en syntaxe Linq?

Répondre

1

C'est la voie à suivre à ce sujet:

DataContext dc = new DataContext(); 

var recipe = (from r in dc.Recipes 
       where r.RecipesID == 1 
       select r).FirstOrDefault(); 

if (recipe != null) 
{ 
    id = recipe.RecipesID; 
    name = recipe.RecipesName; 
} 
+0

Vous pouvez utiliser Single() ou First(). La différence est que Single() lèvera une exception si votre requête LINQ renvoie plusieurs lignes. –

0

Désolé, votre question a été mal comprise. Comme d'autres le disent, vous pouvez utiliser ToList() pour récupérer une liste. Une alternative si vous avez besoin est le premier, il suffit d'utiliser:


query.First().ColumnName 

ou si vous voulez éviter une exception sur la liste vide:


var obj = query.FirstOrDefault(); 
if (obj != null) 
    obj.ColumnName; 

Réponse originale (donc le commentaire marques sens):

Utilisez Linq to Datasets. Fondamentalement serait quelque chose comme:


var query = from r in yourTable.AsEnumerable() 
select r.Field<string>("ColumnName"); 
+0

Dans mon esprit, ce genre de défaites les but de Linq. – roosteronacid

2

Ce n'est vraiment pas clair ce que vous cherchez, car vos deux échantillons sont compatibles.

Aussi près que je peux comprendre, ce que vous voulez est:

var rows = query.ToList(); 
string name = rows[0].RecipesName; 
+0

Exactement ce que je voulais :) – roosteronacid

2
string name = this._db.Recipes.Single(r => r.RecipesID == recipeID).RecipesName;