LINQ to Entities:从多对一关系创建逗号分隔的字符串

时间:2010-03-05 14:38:01

标签: linq-to-entities concatenation

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

我们称之为州和城市 - 城市表有一个FK到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”}, 等

在那里使用String.Join(来自this问题),我得到:

  

LINQ to Entities无法识别   方法'System.String   加入(System.String,System.String [])'   方法,这个方法不能   翻译成商店表达。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

您需要将查询拆分为LINQ to Entities(DB stuff)和LINQ to Objects(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());

编辑:这很接近 - 我必须改变选择城市的方式,以便它是一个字符串数组,而不是城市对象。