【问题标题】:Binding Linq To Entities query results to a datagridview将 Linq To Entities 查询结果绑定到 datagridview
【发布时间】:2010-03-18 19:11:18
【问题描述】:

我刚开始在 Windows 窗体应用程序中使用 Linq to 实体,但我不理解一种看起来如此简单的行为。

如果我在下面键入代码,我会在我的 dataGridView 中获得只读记录

Dim x = From n in Table1 _
        Select n.FirstName, n.LastName, N.Department
DataGridView1.DataSource = x 

但如果我输入以下代码,我的 dataGridView 中会出现可编辑的行

Dim x = From n in Table1 _
        Select n
DataGridView1.DataSource = x

所以,基本上如果我指定要选择的列名并将数据绑定到我的 DataGridView1,这些行是只读的,但如果我没有指定列名和数据绑定到 DataGridView,这些行是可编辑的,我不明白为什么.

【问题讨论】:

  • 嗯,是的,匿名类型是不可变的。你期待什么?
  • 根据文档,不在 VB.NET 中。 (我现在没有坐在编译器前。)
  • 在 VB.NET 中,它们是,嗯,两者都是:visualstudiomagazine.com/articles/2007/10/01/…
  • 嗯,是的,我的回答中包含更多细节。 :/ 好文章。我找了又找,肯定错过了。

标签: linq-to-entities


【解决方案1】:

关于这个有an MSDN article

经过一番搜索和大量编辑我的答案后,罪魁祸首似乎一定是anonymous types。文档表明匿名类型的非关键字段应该是可读写的,但您可能会调用此规则的某种异常。在这两种情况下,我都会调试并检查 x 的确切类型。

this blog entry by someone 中还有另一个可能的提示。 “LINQ 查询表达式将在要生成键的任何情况下自动使用键字段(例如,分组依据),[...]”可能是使用 Select 方法创建的字段自动关键属性。

另一个 Stackoverflow answer 暗示了这一点 - 它们通过将 Key 放在其他类型的字段上来匹配 Select 方法调用的某些结果的类型。

编辑:this article(谢谢,Greg Stuntz)站出来说。天哪。 “您可以在编写 LINQ 查询时通过省略 New With 和 { } 来简化匿名类型定义,但请注意这会创建完全不可变的类型。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多