Агрегирование одной стороны множества ко многим и привязка к сетке в Entity Framework - PullRequest
1 голос
/ 22 ноября 2011

В моей базе данных / модели Entity Framework есть структура «многие ко многим».

CompanyNotice (M-M) CompanyNoticesLocations (M-M) Расположение

enter image description here

Я пытаюсь объединить местоположения для одного CompanyNotice и вернуть разделенное запятыми LocationName для расположений. Я попытался использовать следующий код для агрегирования LocationName:

if (!IsPostBack)
            {
                using (var context = new ALEntities())
                {
                    var query = from c in context.CompanyNotices.Include("Locations")
                                select new 
                                { 
                                    c.CompanyNoticeHeading, 
                                    c.CompanyNoticeText,
                                    c.IsHR,
                                    locations = (from l in c.Locations select l.LocationName).Aggregate((current, next) => string.Format("{0}, {1}", current, next))

                                };
                    ASPxGridView1.DataSource = query;
                    ASPxGridView1.DataBind();
                }   
            }

Я получаю следующую ошибку при попытке использовать приведенный выше код:

LINQ to Entities не распознает метод 'System.String Агрегировать метод [String] (System.Collections.Generic.IEnumerable 1[System.String], System.Func 3 [System.String, System.String, System.String]) 'и этот метод нельзя перевести в выражение магазина.

Когда я пытаюсь:

 if (!IsPostBack)
                {
                    using (var context = new ALEntities())
                    {
                        var query = from c in context.CompanyNotices.Include("Locations")
                                    select new 
                                    { 
                                        c.CompanyNoticeHeading, 
                                        c.CompanyNoticeText,
                                        c.IsHR,
                                        locations = (from l in c.Locations select l.LocationName)

                                    };
                        ASPxGridView1.DataSource = query;
                        ASPxGridView1.DataBind();
                    }   
                }

Данные в столбце местоположений в виде сетки отображаются как:

System.Collections.Generic.List`1 [System.String]

Кто-нибудь знает, как объединить LocationName, чтобы он отображался для одной CompanyNotice?

Заранее спасибо.

1 Ответ

1 голос
/ 22 ноября 2011

Вы могли бы это ...

using (var context = new ALEntities()) 
                    { 
                        var query = from c in context.CompanyNotices.Include("Locations") 
                                    select new  
                                    {  
                                        c.CompanyNoticeHeading,  
                                        c.CompanyNoticeText, 
                                        c.IsHR, 
                                        locations = (from l in c.Locations select l.LocationName) 

                                    }; 
var listed = query.ToList();
var commaListed = listed.Select ( a=> new { a.CompanyNoticeHeading, a.CompanyNoticeText,
commaLines =  a.locations.Aggregate((s1, s2) => s1 + "," + s2)});

затем связать запятуюСписок с вашей сеткой данных

...