2

今日、私は自分自身にLinqtoSQLを教え始めました。linqについてはほとんど何も知りません。そうは言っても、データベースから名前を返したいというクエリがあります。DB内のvarcharです

var query = from a in FRESH.Customers
            select a.CUSTOMER_NAME;

dataGridView1.DataSource = query;

これにより、「長さ」という名前の列を持つグリッドビューが作成され、すべての名前の長さが表示されます。クエリをselect aすべてに変更すると、正常に表示されます。私はここで何が間違っているのですか?

4

2 に答える 2

4

DataGridViewデフォルトでは、リスト内のタイプのすべてのプロパティが列として表示されます。あなたのクエリはstrings のコレクションを返しているので、 a の唯一の「プロパティ」はそれを列として示しています。stringLength

に変更してみてください

var query = from a in FRESH.Customers
            select new {Name = a.CUSTOMER_NAME};

1技術的には、インデクサーCharsは「プロパティ」ですがDataGridView、インデクサーを列として使用しないように十分に賢くなければなりません。

于 2012-11-02T19:39:27.413 に答える
1

問題は、Linq ではなく、gridView にあります。gridView は、オブジェクトのプロパティを検索しますDataSource。そして、最初に見つかったプロパティにバインドします。Lengthしたがって、文字列をプロパティ (Stringオブジェクトが持つ唯一のプロパティ)でバインドします。

gridView に文字列を表示するためのデフォルトのアプローチは、文字列値を持つプロパティを持つラッパーを作成することです。

public class StringValue
{    
    public string Value { get; set; }
}

@DStanleyが提案したように、匿名オブジェクトを作成すると、Linqによってラッパーが作成されます。

var query = from a in FRESH.Customers
            select new { CustomerName = a.CUSTOMER_NAME};

GridView は、匿名オブジェクト内のプロパティを検索し、プロパティを見つけて使用しCustomerNameます。

于 2012-11-02T19:41:10.940 に答える