Linq to entities LINQ到实体:从多对一关系创建逗号分隔的字符串

Linq to entities LINQ到实体:从多对一关系创建逗号分隔的字符串,linq-to-entities,concatenation,Linq To Entities,Concatenation,我有两个具有多对一关系的表,我正在尝试创建一个包含逗号分隔字符串的字符串,如下所示 让我们称它们为State和City-City表有一个FK to State.ID,并且状态属于国家: var foo = from item in _ctx.State where item.country_id == country_id select new { id = item.ID,

我有两个具有多对一关系的表,我正在尝试创建一个包含逗号分隔字符串的字符串,如下所示

让我们称它们为State和City-City表有一个FK to State.ID,并且状态属于国家:

  var foo =  from item in _ctx.State
             where item.country_id == country_id
             select 
             new { id = item.ID, 
                 names = item.Name + ": " + String.Join(", ", 
                 (from c in _entity.City
                  where c.State.ID == item.ID 
                  select c.City_Name).ToArray())
             };
  return Json(foo.ToList());
我要找的东西是:

[{id=3,names=“CA:A,B,C”}, {id=5,names=“OR:D,E”}, 等等

使用字符串.Join(来自问题),我得到:

LINQ to实体无法识别 方法“System.String” Join(System.String,System.String[])' 方法,并且此方法不能为空 翻译成商店表达式


有什么方法可以做到这一点吗?

您需要将查询拆分为LINQ到实体(DB stuff)和LINQ到对象(
String.Join
和其他方法):

编辑:这很接近-我必须改变选择城市的方式,使其成为字符串数组,而不是城市对象

var foo =  from item in _ctx.State
           where item.country_id == country_id
           select 
           new 
           { 
               id = item.ID, 
               names = item.Name,
               cities = from c in item.City select c.Name
           };
var bar = from item in foo.AsEnumerable
          select new
          {
              id = item.id, 
              names = item.names + ": " + String.Join(", ", item.cities.ToArray())
          };
return Json(bar.ToList());