Конкатенация строки в LINQ-to-Entities - PullRequest
1 голос
/ 07 апреля 2011

Этот код работает, если я вынимаю

  • "" + p.MIDDLE_NAME

Таким образом, оставшийся код выглядит так:

p.FIRST_NAME + "" + p.LAST_NAME

Может быть, LINQ-to-Entities просто не поддерживает объединение более двух строк одновременно?

    Protected Sub btnFilter_Click(sender As Object, e As EventArgs) Handles btnFilter.Click
    Dim dbContext As Campus6Entities = New Campus6Entities
    Using dbContext
        Dim find_students = From p In dbContext.PEOPLE _
                            Let Full_Name = p.FIRST_NAME + " " + p.MIDDLE_NAME + " " + p.LAST_NAME _
                            Where Full_Name = txtFilterText.Text _
                            Select p.FIRST_NAME, p.MIDDLE_NAME, p.LAST_NAME, p.PEOPLE_CODE_ID

        rptrFilteredStudents.DataSource = find_students
        rptrFilteredStudents.DataBind()
    End Using
End Sub

Ответы [ 2 ]

3 голосов
/ 07 апреля 2011

Хорошо, вот предположение. Я просто набрал это в LinqPad:

From x in Enumerable.Empty(Of String)().AsQueryable()
Select x + " " + x

И получил это как эквивалентное дерево выражений (извините, LinqPad покажет этот C # -y):

System.String[]
   .Select (x => String.Concat (x, " ", x))

Тогда я набрал это:

From x in Enumerable.Empty(Of String)().AsQueryable()
Select x + " " + x

И дерево выражения стало:

System.String[]
   .Select (x => String.Concat (new String[] { x, " ", x, " ", x } ))

Я предполагаю, что это как-то связано с тем, что Concat имеет перегрузки для максимум четырех параметров, а затем возникает перегрузка, которая принимает массив параметров. Может быть, поставщик LINQ не поддерживает этот последний.

РЕДАКТИРОВАТЬ: Согласно этот ответ LINQ для сущностей в настоящее время не поддерживает string.Concat с чем-то, кроме строк.

0 голосов
/ 08 июня 2017

Я получил что-то похожее, работающее так - в C #, но решение должно работать и в VB:

string.Concat(string.Concat(p.FIRST_NAME, " ", p.MIDDLE_NAME, " "), p.LAST_NAME)

Он не поддерживает более 4-х предметов, поэтому вы должны вложить их.

...