Можно ли заполнить HashTable несколькими ключами из запроса Linq? - PullRequest
0 голосов
/ 03 августа 2011

Я собираю данные из базы данных SQL Server в таблицу DataTable, которую я конвертирую, используя AsEnumerable, а затем разделяю, используя серию операторов Linq.Моя конечная цель - взять эти запросы Linq и создать для меня HashTable.Поэтому вместо анонимных типов:

var facebookPosts
    = from f in results.AsEnumerable()
      where f.GetInt("SocialMediaTypeID").Equals(
          (int) SocialMediaRecordType.FacebookPost)
      select new {
          Headline = f.GetString("Headline"),
          Parameters = new Parameters(f.GetString("Parameters")),
          SocialMediaUserID = f.GetLong("SocialMediaUserID"),
          SocialMediaRecordID = f.GetLong("SocialMediaRecordID"),
          GravityScore = f.GetFloat("GravityScore"),
          NewsDate = f.GetDateTime("NewsDate", false),
          Template = "Facebook"
      };

Я мог бы сделать что-то вроде этого:

var facebookPosts1
    = from f in results.AsEnumerable()
      where f.GetInt("SocialMediaTypeID").Equals(
          (int) SocialMediaRecordType.FacebookPost)
      select new Hashtable {
          { "Headline", f.GetString("Headline"),
            "SocialMediaUserID", f.GetLong("SocialMediaUserID"),
             etc... }                                    
      };

Возможно ли это с .NET 4.0?

РЕДАКТИРОВАТЬ: Чтобы прояснить вопрос, в конечном итоге то, что я делаю с этим, возвращает JSON в браузер.Моя компания создала класс JsonObject, который является производным от HashTable, и это то, что я должен использовать, чтобы в конечном итоге вернуть Json.Я хотел бы создать по одному Hashtable (или JsonObject) для каждой строки в results , который, используя приведенный выше пример, имеет ключ с именем Headline со значением f.GetString ("Заголовок") , другой ключ с именем SocialMediaUserID со значением f.GetLong ("SocialMediaUserID") и т. д.Посты Facebook в конечном итоге будут массивом или IEnumerable HashTable или JsonObject с несколькими парами ключ / значение в каждой.Если я не могу сделать это таким образом, я думаю, что застрял, делая манипуляции с facebookPosts в правильной структуре JsonObject, которая мне нужна?Мне нужно указать имена явно.

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Я не знаю много о классе Hashtable, поскольку Dictionary - это стандартная реализация хеш-таблицы для .NET. Как то так?

...
select new Dictionary<string, object>
                            {
                                {"Headline", f.GetString("Headline")},
                                {"SocialMediaUserID", f.GetLong("SocialMediaUserID")},
                                // etc..
                            };

Или, если у вас есть доступ к System.Web,

using System.Web.Routing;

facebookPosts1 = facebookPosts.Select(p => new RouteValueDictionary(p)).ToList();
0 голосов
/ 03 августа 2011

То, что вы пытаетесь сделать, не соответствует универсальным шаблонам .NET, потому что поля, которые вы пытаетесь прочитать, не всегда будут одного типа. Типичное использование обобщений - это что-то вроде Dictionary<string, string>, где оба типа ключа и значения известны заранее. Вы также должны были бы вложить его уровень глубже; если бы ваш пример работал, он бы возвращал IEnumerable<Hashtable>, что не похоже на то, чтобы с ним было бы хорошо работать.

Похоже, что вы действительно хотите, это полноценный ORM, где он будет возвращать коллекцию строго типизированных классов. Используйте Entity Framework, и он будет обрабатывать создание коллекции для вас без необходимости выполнять манипуляции, которые вы пытаетесь сделать здесь.

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