web-dev-qa-db-ja.com

別名付きのLinq

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

18

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 });
33
cdhowie

投影のその部分を先に配置する必要があります。これは 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"
_
10
Jon Skeet

まだ作成していません。

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

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 ) };
6
Reed Copsey

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

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");
4
Servy
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;
            }
3
hadiz7

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 });
2
D Stanley