【问题标题】:LINQ to SQL, anonymous types are read-onlyLINQ to SQL,匿名类型是只读的
【发布时间】:2009-08-24 12:59:21
【问题描述】:

我正在使用 LINQ to SQL 和 DataGridViews 创建数据库的可编辑用户界面。
我的问题是从数据库中获取结果时我必须翻译列名,因为虽然数据库中的所有名称都是英文(Visual Studio 类设计器支持的唯一语言),但我必须以不同的语言显示它们...

所以我想到了使用匿名类型:

c_dgvShops.DataSource = (from Shop s in DataContext.Shops
                                 select new
                                     {
                                         Azonosito = s.Shop_ID,
                                         Nev = s.Name,
                                         Megye = s.County,
                                         Iranyitoszam = s.Zipcode,
                                         Cim = s.Address,
                                         Latogatasok_szama = s.Visits.Count
                                     });

(请注意,匿名类型的属性名称是匈牙利语[我必须显示的语言],翻译自英文。)

这导致 DataGridViews 是只读的。
我做了一些谷歌搜索,发现了这个: http://blogs.msdn.com/swiss_dpe_team/archive/2008/01/25/using-your-own-defined-type-in-a-linq-query-expression.aspx.
根据这篇文章,我创建了一个名为“Bolt”(Shop 的匈牙利语等价物)的新类,并用翻译后的属性名称填充它,因此查询变为:

c_dgvShops.DataSource = (from Shop s in DataContext.Shops
                                 select new Bolt
                                     {
                                        Azonosito = s.Shop_ID,
                                        Nev = s.Name,
                                        Megye = s.County,
                                        Iranyitoszam = s.Zipcode,
                                        Cim = s.Address,
                                        Latogatasok_szama = s.Visits.Count()
                                     });

虽然我不是很清楚,但是这怎么可能编辑DataGridView中显示的数据,我试了一下,出现了异常:

NotSupportedException:不允许在查询中显式构造实体类型“DataTest_L2SQL.Bolt”。

那么正确的做法是什么?如何显示别名列名称,但仍保持数据可编辑?

非常感谢您!

【问题讨论】:

    标签: c# linq-to-sql anonymous-types


    【解决方案1】:

    您应该手动定义数据网格列(这将允许您将其标题设置为您想要的任何内容以及自定义大小和显示格式),而不是依赖数据网格通过数据源发现您的列 - 这功能仅适用于快速和肮脏的设置。

    【讨论】:

    • 哦,该死的……我把它弄得太复杂了……又一次!谢谢!
    【解决方案2】:

    你做错了。您不应该使用不同的类属性名称进行本地化。

    关注此guide to localize your page。指定列的 HeaderText,更改表单语言,然后重新指定语言的 HeaderText。

    【讨论】:

    • 是的,我已经想通了。但那我应该怎么做呢?
    猜你喜欢
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    相关资源
    最近更新 更多