J'ai la ligne suivante en c #:
var name = (from x in db.authors
where fullName == "Jean Paul Olvera"
orderby x.surname
select new { x.id_author, fullName= String.Concat(x.name," ", x.surname) });
mon problème est que je veux utiliser l'alias dans ma clause where, mais je ne peux pas, 'fullName' apparaît comme non déclaré.
Vous pouvez utiliser let
pour créer des valeurs intermédiaires:
var name = (from x in db.authors
let fullName = x.name + " " + x.surname
where fullName == "Jean Paul Olvera"
orderby x.surname
select new { x.id_author, fullName });
Vous devez mettre cette partie de la projection plus tôt, ce qui est facile avec une clause let
:
var name = from x in db.authors
let fullName = x.name + " " + x.surname
where fullName == "Jean Paul Olvera"
orderby x.surname
select new { x.id_author, fullName };
Notez que x.name + " " + x.surname
Sera compilé dans le même code que String.Concat(x.name, " ", x.surname)
, mais est plus lisible pour la plupart des gens. Notez également que comme vous ne faites rien en dehors des parenthèses ()
, Elles ne sont pas nécessaires.
Je souhaiterais espérer que tout bon fournisseur SQL LINQ transforme cette requête en une requête SQL sensible et efficace, mais vous devez la valider vous-même. D'un autre côté, je suggérerais généralement de préférer l'interrogation sur des champs individuels, par ex.
where x.name == "Jean Paul" && x.surname == "Olvera"
Vous ne l'avez pas encore créé.
Cela étant dit, puisque vous connaissez le nom à l'avance, vous devriez pouvoir effectuer la requête sur les pièces:
var name = from x in db.authors
where name == "Jean Paul" && surname == "Olvera"
orderby x.surname
select new { x.id_author, fullName= String.Concat(x.name," ", x.surname) };
Sinon, vous pouvez utiliser let
pour ce faire:
var name = from x in db.authors
let fullName = String.Concat(x.name," ", x.surname)
where fullName == "Jean Paul Olvera"
orderby x.surname
select new { x.id_author, fullName=fullName ) };
C'est plus simple dans la syntaxe de la méthode, car vous n'êtes pas contraint à l'ordre des opérations:
var query = authors.OrderBy(x => x.surname)
.Select(x => new
{
x.id_author,
fullName = String.Concat(x.name, " ", x.surname)
})
.Where(x => x.fullName == "Jean Paul Olvera");
linq1DataContext ll = new linq1DataContext();
if (comboBox1.SelectedIndex == 0)
{
var q = from m in ll.personals
let کد= m.id
let نام = m.name
select new {
کد,
نام,
};
dataGridView1.DataSource = q;
}
utilisez la clause let
:
var name = (from x in db.authors
let fullName = String.Concat(x.name," ", x.surname)
where fullname = "Jean Paul Olvera"
orderby x.surname
select new { x.id_author, fullName });