Формат списка <T>для объединения полей - PullRequest
1 голос
/ 10 апреля 2011

Я посмотрел сотни подобных вопросов по SO на заданный, но не нашел своего ответа. Если об этом уже спрашивали, примите мои извинения.

У меня есть база данных SQL с колонкой городов и колонкой их штатов соответственно. Я использую Entity Framework в качестве своего DAL, и в моем BLL есть много LINQ для форматирования, перемещения и т. Д. У меня есть в UI раскрывающийся список, который в настоящее время принимает ToList() от метода в моем BLL, и все работает хорошо , но мне нужно изменить этот метод, чтобы вернуть город и штат, разделенные запятой. Пока у меня есть (что не работает!):

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 для рассматриваемой страны, в случае моего примера: «США». Это может быть, например, «GB» для Великобритании или «FR» для Франции или «DE» для Германии.

Ответы [ 2 ]

3 голосов
/ 10 апреля 2011

Редактировать: Удален анонимный тип Редактировать: Добавлен пробел в объявлении разделителя, чтобы немного отличаться :-) ","

Надеюсь, я не неправильно понимаю вашевопрос, но вы можете добавить это сделать следующим образом, добавив разделитель в возвращаемое значение запроса:

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 голос
/ 10 апреля 2011
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"
...