Как создать список List <Dictionary <string, string >> из запроса linq - PullRequest
1 голос
/ 13 марта 2012

У меня есть следующий код, который делает то, что я хочу, однако мне было интересно, есть ли способ сделать то же самое непосредственно из запроса linq.

        XElement xmlData = XElement.Parse(items.Xml);
        var itemsNotSynched =
            (from a in xmlData.Descendants(XName.Get("row", "#RowsetSchema"))
             group a by new
             {
                 employeeID = (string)a.Attribute("ows_EmployeeID"),
                 courseID = (string)a.Attribute("ows_CourseID"),
                 title = (string)a.Attribute("ows_LinkTitle")
             } into ex
             select new
             {
                 ex.Key.title,
                 ex.Key.courseID,
                 ex.Key.employeeID
             } into eb
             select eb).ToArray();

        List<Dictionary<string, string>> list = new List<Dictionary<string, string>>();
        foreach(var item in itemsNotSynched)
        {
            Dictionary<string, string> itm = new Dictionary<string, string>();
            itm.Add("employeeID", item.employeeID.ToString());
            if(item.courseID != null)
            {
                itm.Add("courseID", item.courseID.ToString());
            }
            itm.Add("title", item.title.ToString());
            list.Add(itm);
        }

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

-EC-

Редактировать 1.

Мне удалось получить то, что я хотел, используя предложение от SLaks... Я сделаю еще один выстрел в .Distinct ()

    XElement xmlData = XElement.Parse(items.Xml);
    List<Dictionary<string,string>> itemsNotSynched =
        (from a in xmlData.Descendants(XName.Get("row", "#RowsetSchema"))
         group a by new
         {
             employeeID = (string)a.Attribute("ows_EmployeeID"),
             courseID = (string)a.Attribute("ows_CourseID"),
             title = (string)a.Attribute("ows_LinkTitle")
         } into g

         select new Dictionary<string, string>
         { 
            {"employeeID", g.Key.employeeID },
            {"courseID", g.Key.courseID },
            {"title", g.Key.title}
         } into f
         select f).ToList();

Ответы [ 2 ]

3 голосов
/ 13 марта 2012
select new Dictionary<string, string> {
    { "employeeID", ex.Key.title }, 
    ...
}
0 голосов
/ 15 марта 2012

Используя точечный / свободный синтаксис, я думаю, что вам нужно:

XElement xmlData = XElement.Parse(items.Xml);
List<Dictionary<string,string>> itemsNotSynched =
     xmlData.Descendants(XName.Get("row", "#RowsetSchema"))
     .Select(a => new
     {
         employeeID = (string)a.Attribute("ows_EmployeeID"),
         courseID = (string)a.Attribute("ows_CourseID"),
         title = (string)a.Attribute("ows_LinkTitle")
     })
     .Distinct()
     .Select(a => new Dictionary<string, string>
     { 
        {"employeeID", a.employeeID },
        {"courseID", a.courseID },
        {"title", a.title}
     })
     .ToList();

Distinct() выполняет то же самое, что группирование, но только с использованием ключей.Как написано, эта Distinct() реализация почти идентична той, что у вас уже была, но она может работать лучше и / или использовать меньше памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...