LINQ to SQL,匿名类型是只读的

时间:2009-08-24 12:59:22

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

我正在使用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是只读的 我做了一些Google搜索,发现了这个: 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”。

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

非常感谢你!

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

你正在走错路。您不应该使用不同的类属性名称进行本地化。

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