Как конкатенировать строки в запросе Entity Framework?

Как объединить строки в Entity Framework 4 У меня есть данные из столбца, и я хочу сохранить в виде строки строку с разделителями-запятыми, такую ​​как "value1, value2, value3" Есть ли способ или оператор сделать это в EF4? Пример: скажем, что у меня есть два столбца Fruit и Farms со следующими значениями:

  • Яблоки
  • Бананы
  • Земляника

Если мне это нравится

var dataSource = this.context
    .Farms
    .Select(f => new
        {
            f.Id, 
            Fruits = string.Join(", ", f.Fruits)
        });

Конечно, я получу эту ошибку

LINQ to Entities не распознает метод "System.String Join (System.String, System.Collections.Generic.IEnumerable`1 [System.String])", и этот метод не может быть переведен в выражение хранилища.

Есть ли какое-либо решение для этого?

Ответ 1

Вы должны выполнить запрос перед проектированием. В противном случае EF пытается перевести метод Join в SQL (и, очевидно, не работает).

var results = this.context
                  .Farms
                  .ToList()
                  .Select(f => new
                      {
                          f.Id, 
                          Fruits = string.Join(", ", f.Fruits)
                      });

Ответ 2

Принял @Yakimych ответ, и мысль предоставила бы мне, если бы кто-то нуждался:

using (myDBEntities db = new myDBEntities())
            {
                var results = db.Table
                    .ToList()
                    .Where(x => x.LastName.StartsWith("K"))
                    .Select(
                    x => new
                    {
                        x.ID,
                        Name = x.LastName + ", " + x.FirstName
                    }
                    );

                lstCoaches.DataValueField = "ID";
                lstCoaches.DataTextField = "Name";
                lstCoaches.DataSource = results;
                lstCoaches.DataBind();
                ListItem item = new ListItem
                {
                    Value = "0",
                    Text = "-- Make a Selection --"
                };
                lstCoaches.Items.Insert(0,item);
                lstCoaches.SelectedIndex = 0;
            }