REMARQUE: tout le code est écrit en haut de ma tête. Il peut contenir quelques erreurs. Procurez-vous le point d'ensemble de cette question)Problème Linq.NHibernate avec l'instruction OR
Prendre cette définition de la classe: (réduite pour simplifier)
public class CodedValue
{
public string Code { get; set; }
public string Value {get; set; }
}
Prendre thoses objets:
CodedValue cv1 = new CodedValue(){ Code = "A", Value = "1" };
CodedValue cv2 = new CodedValue(){ Code = "B", Value = "2" };
IList<CodedValue> cvList = new List<CodedValue>();
cvList.Add(cv1);
cvList.Add(cv2);
cvList contient une liste de CodedValue pour filtrer .
Lets prétendre que ma base de données contient thoses enregistrements:
CODE VALUE
A 1
A 2
B 1
B 2
Maintenant, je veux récupérer tous les objets où le codedvalue est dans la liste
var filter = from o in MyRepository.List()
where cvList.Contains(o.CodedValue)
select o;
NHibernate traduire ce Linq à cela:
select [Fields...] from [Table...]
where Code in ('A', 'B') and Value in ('1', '2');
Ceci est faux. Si vous jetez un oeil à mon exemple d'enregistrements, ce SQL retournera toutes les lignes. Le SQL devrait être traduit en:
select [Fields...] from [Table...]
where (Code = 'A' and Value = '1') or (Code = 'B' and Value = '2');
Alors, je peux obtenir le résultat que je veux en utilisant Linq? Si c'est le cas, comment? Si non, comment puis-je y parvenir?
Merci
Cela vient de faire ma nuit ... Je suis tellement heureux en ce moment. –