2010-02-24 2 views
0

Tout juste commencé à développer en utilisant LINQ, et ne peut toujours pas comprendre certaines choses simples. Ainsi, LinqTable.SingleOrDefault(t=>(t.Field1=="value1")) est égal à SQL "SELECT * FROM LinqTable WHERE Field1="value1" LIMIT 1"Question Linq simple: Comment créer une requête avec des opérateurs logiques

Comment créer (LINQ) la requête comme "SELECT * FROM LinqTable WHERE Field1="value1" AND Field2="value2" LIMIT 1?

+0

Juste une note - 'SingleOrDefault' lèvera une exception s'il y a plus d'un enregistrement correspondant. 'FirstOrDefault' ne le sera pas. –

Répondre

3

SingleOrDefault (t => (t.Field1 == "valeur1" & & t.Field2 == "valeur2"))

+0

Je l'ai essayé avant et ça n'a pas marché, je le jure! Mais maintenant j'ai essayé encore et cela fonctionne. Merci – setrul

+0

+1, vous n'avez pas besoin d'utiliser le extra(). @Setrul: pour mieux comprendre LINQ, faire une recherche Google pour "LINQ 101" – Zyphrax

1

Normalement, vous voulez utiliser Where pour ce faire:

var result = LinqTable.Where(t => t.Field1 == "value1" && t.Field2 == "value2").SingleOrDefault(); 

Vous pouvez le faire directement dans la ligne de SingleOrDefault ainsi:

var result = LinqTable.SingleOrDefault(t => t.Field1 == "value1" && t.Field2 == "value2"); 
+0

Ne pas utiliser Where mais utiliser la surcharge de SingleOrDefault qui accepte un prédicat. – Zyphrax

+0

Les deux options fonctionnent, très bien, et créeront le même SQL dans EF et L2S. Personnellement, je trouve l'utilisation plus descriptive, dans ce cas, compte tenu des objectifs du PO. –

3
LinqTable.Where(row => row.Field1 == "value1" && row.Field2 == "value2").FirstOrDefault(); 
+0

+1 pour FirstOrDefault(). La question, comme indiqué, n'indique pas que les valeurs trouveraient un résultat unique. –