У меня есть много подобных звонков в базу данных, и они прекрасно работаютРасширение Выбор методов Entity Framework
Using ta As New QT_SSTEntities
Return ta.Product.
Select(Function(c) New RadComboBoxData() With {.Text = c.FieldName1, .Value = c.FieldName1}).
ToArray()
End Using
Using ta As New QT_SSTEntities
Return ta.City.
Select(Function(c) New RadComboBoxData() With {.Text = c.CityName, .Value = c.CityName}).
ToArray()
End Using
Using ta As New QT_SSTEntities
Return ta.OtherProduct.
Select(Function(c) New RadComboBoxData() With {.Text = c.FieldName3, .Value = c.FieldName3}).
ToArray()
End Using
Они производят SQL подобный код:
SELECT FieldName1 FROM Product
Я хочу extact
Select(Function(c) New RadComboBoxData() With {.Text = c.SomeField, .Value = c.SomeField}).ToArray()
в другой способ (что-то вроде этого, но он не работает).
<Extension()>
Public Function ToRadComboBoxData(Of TSource, TItem)(ByVal source As IQueryable(Of TSource), selector As Expression(of Func(Of TSource, TItem))) As RadComboBoxData()
Dim r = (From row In source Select selector(row)).ToArray() 'Build tree from expression. How???
Return (From v In r
Let rv = If(v Is Nothing, Nothing, v.ToString())
Select New RadComboBoxData() With {.Text = rv, .Value = rv}).ToArray()
End Function
и сделать звонки в следующим образом:
Using ta As New QT_SSTEntities
Return ta.Product.ToRadComboBoxData(Function(c) c.FieldName1)
End Using
Using ta As New QT_SSTEntities
Return ta.City.ToRadComboBoxData(Function(c) c.CityName)
End Using
Using ta As New QT_SSTEntities
Return ta.OtherProduct.ToRadComboBoxData(Function(c) c.FieldName3)
End Using
Да, он сейчас работает, спасибо! Последний вопрос - в этом случае EF генерирует sql для сбора всех полей из указанной таблицы. Было бы здорово выбрать только одно поле, прошедшее как Func <>. Поэтому нам нужно передать выражение, сгенерировать Select FieldName ... sql и после этого создать RadComboBoxData из IEnumerable. Как мы можем сделать это? – Cheburek
Не уверен, что я понимаю ваш вопрос ... это то, что вы хотите? 'Return ta.Product.Select (Функция (p) => p.FieldName) .ToRadComboBoxData (Функция (c) c)' –
Я обновил свой вопрос. См. Раздел ** Редактировать 2 ** в разделе – Cheburek