Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq To Sql返回值长度而不是值_C#_Linq To Sql - Fatal编程技术网

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

C# Linq To Sql返回值长度而不是值,c#,linq-to-sql,C#,Linq To Sql,我今天刚开始自学LinqtoSQL。我对林克几乎一无所知。也就是说,我有一个查询,我想从数据库中返回一个名称。它是数据库中的一个varchar var query = from a in FRESH.Customers select a.CUSTOMER_NAME; dataGridView1.DataSource = query; 这将生成一个名为“Length”的列的gridview,并显示每个名称的长度。如果我将查询更改为选择一个,则所有内容都显示良好。我做错了

我今天刚开始自学LinqtoSQL。我对林克几乎一无所知。也就是说,我有一个查询,我想从数据库中返回一个名称。它是数据库中的一个varchar

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

dataGridView1.DataSource = query;

这将生成一个名为“Length”的列的gridview,并显示每个名称的长度。如果我将查询更改为
选择一个
,则所有内容都显示良好。我做错了什么?

默认情况下,
DataGridView
会将列表中类型的所有属性显示为列。由于查询返回的是
string
s的集合,而
string
的长度是
Length
,因此它将其显示为一列

试着换成

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

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

问题在gridView中,而不是在Linq中-gridView在
DataSource
中查找对象的属性。并且它绑定到第一个找到的属性。因此,它通过
Length
property(它是
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
属性。

我不同意,GridView绑定到属性。由于字符串数组只有两个属性(Chars和Length),您只能绑定到这两个属性。@trispid它与我写的有什么不同
它是字符串唯一的属性
,为什么我选择整个表时它会起作用?你有什么地方可以告诉我一个好的教程吗?不是MSDN站点,而是更真实的使用它可以工作,因为您返回的对象集合的属性类似于
CUSTOMER\u NAME
。当你返回一组字符串时,你还没有聪明到知道你想要显示的是字符串而不是它们的属性。嘿..已经..相信我..谢谢