Linq To Sql返回值长度而不是值

时间:2012-11-02 19:34:55

标签: c# linq-to-sql

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

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

dataGridView1.DataSource = query;

这会生成一个名为“Length”的列的gridview,并显示每个名称的长度。如果我将查询更改为select a,则一切正常。我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

默认情况下,DataGridView会将列表中所有类型的属性显示为列。由于您的查询返回了string的集合,string的{​​{3}}为Length,因此它会将其显示为列。

尝试更改为

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

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

答案 1 :(得分: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属性。