Vb.net 对于LINQ投影,我有哪些选项?
在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]
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是指国际性格问题?