22

私は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」が宣言されていないように見えます。

4

6 に答える 6

41

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 });
于 2013-04-09T16:07:16.300 に答える
10

プロジェクションのその部分を前に配置する必要があります。これは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"
于 2013-04-09T16:07:30.077 に答える
6

まだ作成していません。

そうは言っても、事前に名前を知っているので、パーツに対してクエリを実行できるはずです。

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 ) };
于 2013-04-09T16:06:53.873 に答える
4

操作の順序に制約されないため、メソッド構文の方が簡単です。

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");
于 2013-04-09T16:08:24.973 に答える
2

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 });
于 2013-04-09T16:07:39.593 に答える