Какие варианты у меня есть для проекций LINQ? - PullRequest
1 голос
/ 25 марта 2009

В LINQ я хотел бы проецировать имена, отличные от имен из таблиц базы данных. «Дружественные имена», которые я могу использовать для заголовков столбцов. Имена, которые имеют «%» или, возможно, «» (пробел). Запрос ниже не скомпилируется.

Возможно ли что-то подобное, или я застрял с подчеркиванием _ в ужасе?

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

Ответы [ 5 ]

3 голосов
/ 25 марта 2009

Вам все еще нужно создать допустимые имена переменных. Привязка отображаемого имени к имени переменной была бы очень плохой идеей, IMO. У i18n нет абсолютно никаких шансов, что, конечно, не является для вас проблемой, но он слишком сильно связывает пользовательский интерфейс с кодом доступа к данным.

Было бы гораздо лучше указать заголовки столбцов отдельно. Таким образом, вы получите разумные имена переменных, которые легко использовать из кода, и заголовки столбцов, которые не ограничены правилами или идентификаторами.

3 голосов
/ 25 марта 2009

В LINQ вы все равно должны следовать правилам именования переменных, которые не допускают пробелов или знаков%.

1 голос
/ 25 марта 2009

Конечно, можно проецировать разные имена для полей базы данных, используя предложение select.

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

Однако выбранные имена по-прежнему должны быть действительными идентификаторами VB. Так что вы не сможете использовать пробел или%

0 голосов
/ 27 августа 2009

Если вы создаете класс, который находится между вашим Linq и вашим пользовательским интерфейсом, вы можете использовать

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
0 голосов
/ 25 марта 2009

Для части select вашего запроса LINQ используйте что-то вроде

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

и пр. Эти свойства будут автоматически созданы для коллекции IEnumerable, возвращаемой запросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...