C# Linq To Sql返回值长度而不是值
我今天刚开始自学LinqtoSQL。我对林克几乎一无所知。也就是说,我有一个查询,我想从数据库中返回一个名称。它是数据库中的一个varcharC# 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,并显示每个名称的长度。如果我将查询更改为选择一个,则所有内容都显示良好。我做错了
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
。当你返回一组字符串时,你还没有聪明到知道你想要显示的是字符串而不是它们的属性。嘿..已经..相信我..谢谢