我有一个名为dataGrid的数据网格的WPF项目。
我正在做一些测试,看看lambda表达式和运算符是如何工作的。
以下是我的表格中的数据:
我不明白为什么会这样:
this.dataGrid.ItemsSource = (from em in context.tUsers
select new { em.name }).ToList();
但如果我喜欢.codeproject.com上的教程:
this.dataGrid.ItemsSource = (from em in context.tUsers
select em.name).ToList();
所以我猜第一个会创建一个匿名对象并将em.name放入其中。但我不明白一个人会工作,而不是另一个。
我特别感兴趣的是它显示那些整数的原因。
无论如何可以解释一下?
PS:我刚注意到整数实际上是字符串的长度。我不知道为什么。
答案 0 :(得分:1)
您正在混合使用2种语法:
this.dataGrid.ItemsSource = (from em in context.tUsers
select new { em.name }).ToList();
它将创建一个字符串列表(即您要查找的名称)
而且:
this.dataGrid.ItemsSource = (from em in context.tUsers
select em).ToList();
它将创建一个对象“employee”的列表。
修改: 默认情况下,DataGrid会自动生成给定项类的列,因此它将搜索String类中可以转换为列的属性。所以这里显示了string.Length。 因此,您需要创建自己的列并关闭AutoGenerateColumns。示例:
<DataGrid Name="MainGrid" ... AutoGenerateColumns="False" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Header="name" Binding="{Binding}"/>
</DataGrid.Columns>
</DataGrid>
答案 1 :(得分:1)
网格显示您传递给它的可枚举类型的每个非索引器属性的列。
在第一种情况下,您传递一个匿名类型的列表,该列表具有单个name
属性,这是一个字符串,因此它显示一个名为name
的列并显示这些字符串。
在第二种情况下,您传递一个字符串列表,并且字符串只有一个Length
属性,因此它会创建一个名为Length
的列,并显示这些长度。
答案 2 :(得分:0)
this.dataGrid.ItemsSource = (from em in context.tUsers
select em.name).ToList();
这将返回一个字符串列表,而另一个将选择一个具有name属性的匿名类型列表。
它显示每个String的长度,为什么它默认为这种行为,我不知道。