2

我今天刚开始自学 Linq to SQL。我对 linq 几乎一无所知。话虽如此,我有一个查询,我想从我的数据库中返回一个名称。它是数据库中的 varchar

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

dataGridView1.DataSource = query;

这会产生一个带有名为“长度”的列的网格视图,并显示每个名称的长度。如果我将查询更改为select a一切显示正常。我在这里做错了什么?

4

2 回答 2

4

默认情况下,将DataGridView列表中类型的所有属性显示为列。由于您的查询返回 s 的集合,string并且 a 的唯一1 个“属性”stringLength显示为一列。

尝试更改为

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

1从技术上讲,索引器Chars是一种“属性”,但DataGridView必须足够聪明,不要将索引器用作列。

于 2012-11-02T19:39:27.413 回答
1

问题出在 gridView 中,而不是在 Linq 中 - 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 回答