LINQ投影有哪些选择?

时间:2009-03-25 01:49:56

标签: vb.net linq linq-to-sql

在LINQ中,我想要设置与数据库表中不同的名称。我可以用于列标题的“友好名称”。具有“%”或可能为“”(空格)的名称。下面的查询将无法编译。

这样的事情是可能的还是我坚持使用可怕的_下划线来处理所有事情?

dim query = from p in ctx.SomeTable() _
    select ProductName = p.product_name, _
           [Expiration Date] = p.expiration_date,
           [% of sales] = p.pct_sales

5 个答案:

答案 0 :(得分:3)

在LINQ中,您仍然必须遵循变量命名规则,该规则不允许使用空格或%符号。

答案 1 :(得分:3)

您仍然需要创建有效的变量名称。将显示名称绑定到变量名称将是一个非常糟糕的主意,IMO。绝对没有i18n的机会,当然这对你来说可能不是问题 - 但它在UI和数据访问代码之间形成了太紧密的联系。

分别指定列标题会好得多。这样,您最终会得到易于使用的合理变量名称,以及不受规则或标识符限制的列标题。

答案 2 :(得分:1)

使用select子句可以为数据库的字段设置不同的名称。

Dim query = From p in ctx.SomeTable() _
  Select ProductName = p.product_name, ExpirationData = p.expiration_date

但是,所选的名称仍必须是有效的VB标识符。这样就无法使用空格或%

答案 3 :(得分:0)

对于LINQ查询的选择部分,请使用类似

的内容
select new { MyNewProductName = p.product_name, MySillyColumnTitle = p.pct_sales }

等等。将为查询返回的IEnumerable集合自动创建这些属性。

答案 4 :(得分:0)

如果您创建一个位于Linq和UI之间的类,则可以使用

Imports System.ComponentModel

Public NotInheritable Class ModelSomeTable

'Help prevent accidental direct field access in the class
<EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)> _
private _pct_sales as decimal

'Components will know what to use for the heading
<Display("% of sales")> _
Public ReadOnly Property pct_sales() As decimal
    Get
        Return _pct_sales
    End Get
End Property

'code can see it, datagrids/datagridviews and other components won't
private _RowId as integer
<Browsable(false)> _
    Public ReadOnly Property RowId() As integer
    Get
        Return _RowId
    End Get
End Property

End Class