格式列表<t>以连接字段</t>

时间:2011-04-10 11:12:04

标签: c# linq entity-framework entity-framework-4 linq-to-entities

我已经看过几百个关于问题的类似问题,但是没有找到答案。如果之前有人问过,请接受我的道歉。

我有一个SQL数据库,其中包含一列城市和一列状态。我使用实体框架作为我的DAL,在我的BLL中有很多LINQ来格式化,移动东西等等。我在我的UI上有一个下拉列表,当前从我的BLL中的方法接受ToList()并且所有效果很好,但我需要改变这个方法来返回城市和州,用逗号分隔。我有这个到目前为止(这不起作用!):

public static List<char> GetCitiesInCountryWithState(string isoalpha2)
{
    const string delimiter = ",";
    using (var ctx = new atomicEntities())
    {
        var query = from c in ctx.Cities
                    join ctry in ctx.Countries on c.CountryId equals ctry.CountryId
                    where ctry.IsoAlpha2 == isoalpha2
                    select new { c.CityName, c.State };
        var cities = query.Select(i => i.CityName).Aggregate((i, j) => i + delimiter + j);
        return cities.ToList();  
    }
}

我尝试了很多LINQ版本,但我显然没有这么做。有人可以提供一些帮助吗?一如既往,我们赞赏:)

编辑1 :我希望该方法的输出是由逗号和空格分隔的连接城市名称和状态的列表;例如:

Miami, Florida
Key West, Florida
New York, New York
Boston, Massachusetts

输入只是相关国家的ISO-Alpha2代码,就我的例子而言:'US'。这可能是英国的“GB”或法国的“FR”或德国的“DE”。

2 个答案:

答案 0 :(得分:3)

修改:删除了匿名类型 编辑:在分隔符声明中添加空格有点不同:-)“,”

希望我不会误解您的问题,但您可以通过在查询的返回值中添加分隔符来添加如下:

public static List<string> GetCitiesInCountryWithState(string isoalpha2)    
{
    const string delimiter = ", ";        
    using (var ctx = new atomicEntities())        
    {
        var query = from c in ctx.Cities                        
                    join ctry in ctx.Countries on c.CountryId equals ctry.CountryId 
                    where ctry.IsoAlpha2 == isoalpha2                        
                    select c.CityName + delimiter + c.State ;            
        return query.ToList();
    }
}

这将创建一个类型字符串

的列表

答案 1 :(得分:1)

public static List<string> GetCitiesInCountryWithState(string isoalpha2)
{
    using (var context= new atomicEntities())
    {
        return (from city in context.Cities
                join country in context.Countries on c.CountryId equals country.CountryId
                where country.IsoAlpha2 == isoalpha2
                select String.Concat(city.CityName, ", ", city.State)
                // select String.Format("{0}, {1}", city.CityName, city.State)
                ).ToList();             
    }
}

FYI

您也可以使用String.Join(string, IEnumerable<String>)获得如下结果:

IEnumerable<string> GetCitiesInCountryWithState(string)

IEnumerable<string> r = GetCitiesInCountryWithState("100");
// { { "Miami, Florida" }, { "Key West, Florida" } }

string s = String.Join("; ", r);
// "Miami, Florida; Key West, Florida"