Je viens de demander this question. Ce qui m'a conduit à une nouvelle question :)Linq to SQL: .FirstOrDefault() non applicable pour sélectionner un nouveau {...}
Jusqu'à présent, j'ai utilisé le modèle suivant de sélection de choses avec Linq to SQL, dans le but de pouvoir gérer 0 "rows" retourné par la requête:
var person = (from p in [DataContextObject].Persons
where p.PersonsID == 1
select new p).FirstOrDefault();
if (person == null)
{
// handle 0 "rows" returned.
}
Mais je ne peux pas utiliser FirstOrDefault()
quand je fais:
var person = from p in [DataContextObject].Persons
where p.PersonsID == 1
select new { p.PersonsID, p.PersonsAdress, p.PersonsZipcode };
// Under the hood, this pattern generates a query which selects specific
// columns which will be faster than selecting all columns as the above
// snippet of code does. This results in a performance-boost on large tables.
Comment puis-je vérifier 0 « lignes » renvoyées par la requête, en utilisant le second motif?
MISE À JOUR:
Je pense que ma génération échoue parce que je suis en train d'affecter le résultat de la requête à une variable (this._user
) déclarée avec le type de [DataContext].User
.
this._user = (from u in [DataContextObject].Users
where u.UsersID == [Int32]
select new { u.UsersID }).FirstOrDefault();
Erreur de compilation: ne peut pas convertir implicitement le type "AnonymousType # 1" à "[DataContext] .user".
Des idées sur comment je peux contourner cela? Devrais-je faire mon propre objet?
D'accord, ce qui précède devrait fonctionner, sauf s'il y a une erreur d'exécution non liée. – Codewerks
Mis à jour ma question. – roosteronacid