Как объединить строки в Entity Framework Query? - PullRequest
14 голосов
/ 04 ноября 2010

Как объединить строки в 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]) ', и этот метод нельзя преобразовать в выражение хранилища.

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

Ответы [ 2 ]

13 голосов
/ 04 ноября 2010

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

var results = this.context
                  .Farms
                  .ToList()
                  .Select(f => new
                      {
                          f.Id, 
                          Fruits = string.Join(", ", f.Fruits)
                      });
1 голос
/ 13 октября 2014

Взял ответ @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;
            }
...