私は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) });
私の問題は、where句でエイリアスを使用したいのですが、 'fullName'が宣言されていないように見えます。
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 });
投影のその部分を先に配置する必要があります。これは 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 };
_
_x.name + " " + x.surname
_はString.Concat(x.name, " ", x.surname)
と同じコードにコンパイルされますが、ほとんどの人にとって読みやすいことに注意してください。また、_()
_の括弧の外では何もしないので、括弧は必要ありません。
私は希望優れたSQL LINQプロバイダーはこのクエリを賢明で効率的なSQLクエリに変換する必要がありますが、自分で検証する必要があります。一方、私は一般に個々のフィールドよりもクエリを優先することをお勧めします、例えば.
_where x.name == "Jean Paul" && x.surname == "Olvera"
_
まだ作成していません。
そうは言っても、名前は事前にわかっているので、パーツに対してクエリを実行できるはずです。
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) };
それ以外の場合は、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=fullName ) };
操作の順序に制約されないため、メソッド構文の方が簡単です。
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;
}
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 });