Vb.net 对于LINQ投影,我有哪些选项?

Vb.net 对于LINQ投影,我有哪些选项?,vb.net,linq,linq-to-sql,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]

在LINQ中,我希望投影不同于数据库表的名称。“友好名称”,我可以用于列标题。包含“%”或可能包含“”的名称(空格)。下面的查询无法编译

这样的事情可能发生吗?还是我总是使用可怕的下划线

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

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

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

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

对于LINQ查询的选择部分,请使用以下命令

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

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

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

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

这当然是正确的可以使用select子句为数据库的字段投影不同的名称

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

但是,选择的名称仍然必须是有效的VB标识符。因此,这将阻止您使用空格或%

当然可以使用select子句为数据库的字段投影不同的名称

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

但是,选择的名称仍然必须是有效的VB标识符。因此,这将阻止您使用空格或%

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


单独指定列标题要好得多。这样,您就可以得到易于从代码中使用的合理变量名,以及不受规则或标识符限制的列标题。

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


单独指定列标题要好得多。这样,您就得到了易于从代码中使用的合理变量名,以及不受规则或标识符限制的列标题。

如果您创建了一个位于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
导入System.ComponentModel
公共不可继承类ModelSomeTable
'帮助防止意外直接访问类中的字段
_
私人(按十进位计算)销售额
“组件将知道标题的用途
_
公共只读属性pct_sales()为十进制
得到
退货(百分比)销售额
结束
端属性
“代码可以看到它,datagrids/DataGridView和其他组件不会看到它
private\u RowId作为整数
_
公共只读属性RowId()为整数
得到
返回_RowId
结束
端属性
末级

如果创建一个位于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
导入System.ComponentModel
公共不可继承类ModelSomeTable
'帮助防止意外直接访问类中的字段
_
私人(按十进位计算)销售额
“组件将知道标题的用途
_
公共只读属性pct_sales()为十进制
得到
退货(百分比)销售额
结束
端属性
“代码可以看到它,datagrids/DataGridView和其他组件不会看到它
private\u RowId作为整数
_
公共只读属性RowId()为整数
得到
返回_RowId
结束
端属性
末级

这是C#,提问者似乎是为了VB。net这是C#,提问者似乎是为了VB。Net@Jon-+1对于关注点分离,数据模型应与表示分离。我认为当你说i18n?@Jon-+1分离关注点时,你指的是国际字符问题,数据模型应该与表示分离。我想你说i18n是指国际性格问题?