LINQ to hash - не могу правильно подобрать кастинг! - PullRequest
0 голосов
/ 02 мая 2011

У меня есть таблица в SQL Server с 3 столбцами, доменом, ключом и значением. Я хотел бы получить хеш, который я могу использовать в дот-сети. Я использую EF 4.0.

сначала я попробовал:

List<Dictionary<string, string>> myHash = db.Registries
  .Where(x => x.Domain == "Pricing")
  .Select(x => new { Key = x.Key, Value = x.Value });

который жалуется:

Ошибка 3 Не удается неявно преобразовать тип 'System.Linq.IQueryable' в 'System.Collections.Generic.List>'. Существует явное преобразование (вам не хватает приведения?) C: \ Users \ ekkis \ Documents \ Visual Studio 2010 \ Projects \ SkillScore \ Website \ Controllers \ HomeController.cs 53 21 Веб-сайт

поэтому очевидно, что тип выбора должен быть изменен. Я возился с этим в течение получаса (я так бесполезен!), Не имея возможности заставить его работать (Боже, я скучаю по IRC). кому-нибудь помочь?

Ответы [ 2 ]

3 голосов
/ 02 мая 2011

Похоже, это то, что вам нужно:

List<Dictionary<string, string>> myHash = db.Registries
                                            .GroupBy(x => x.Domain)
                                            .Select(g => g.ToDictionary(x => x.Key, 
                                                                        x => x.Value))
                                            .ToList() ;

Это создает отдельный словарь для каждого домена и помещает их все в список.Это не совсем полезно, так как вы теряете информацию о доменном имени - возможно, Dictionary<string, Dictionary<string,string>> будет больше, чем вы хотите (имея имя домена в качестве ключа внешнего словаря).

Словарь дляодин домен, который вы можете получить, используя ToDictionary() напрямую:

var pricingDictionary = db.Registries
                          .Where(x => x.Domain == "Pricing")
                          .ToDictionary( x => x.Key, 
                                         x => x.Value);

Обратите внимание, что типingingDictionary - Dictionary<string, string>, поэтому, если вам нужен полный тип, вы можете сделать:

0 голосов
/ 02 мая 2011

Меня заинтересовало: "Как создать словарь словарей в запросе LINQ".

Вот моя скромная попытка, которая не проверена , потому что я не являюсь LINQ-DB, потому что у меня нет IIS, потому что я не могу ввести IIS по «подлинным» причинам, о которых некоторые могут догадаться .

Пожалуйста, не стесняйтесь редактировать этот код, чтобы исправить его (если он сломался).

using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args) {
            var registries = FetchAllRegistries();
            foreach ( KeyValuePair<string, Dictionary<string,string>> domain in registries ) {
                Console.WriteLine("Domain: "+domain.Key);
                foreach ( KeyValuePair<string,string> entry in domain.Value ) {
                    Console.WriteLine("  "+entry.Key+" "+entry.Value);
                }                
            }
        }

        private static Dictionary<string, Dictionary<string, string>> FetchAllRegistries() {
            return db.Registries
                .GroupBy(x => x.Domain)
                .Select(g => g.ToDictionary(
                    d => d.Domain,
                    d => d.ToDictionary(
                        kv => kv.Key,
                        kv => kv.Value
                    )
                ))
            ;
        }

        private static Dictionary<string, Dictionary<string, string>> FetchRegistry(string domainName) {
            return db.Registries
                .Where(x => x.Domain == domainName)
                .ToDictionary(
                    x => x.Key
                  , x => x.Value
                );
        }

    }

}

И прости меня: эти запросы только подтверждают мое мнение о том, что LINQ ооочень уродлив, что его пострижка должна быть побрита, и его нужно учить ходить в обратном направлении. Верно: версия «длинной руки» ОЧЕНЬ более многословна, НО это также ОЧЕНЬ более очевидна. Я предполагаю, что моя точка зрения такова: «LINQ великолепен. Позор кривой обучения STEEEEEEP».

И, да, пожалуйста ... давайте все вернемся к Perl cgi-scripts. Благослови меня, отец, потому что я не могу унаследовать ... Я влюблен в простого человека. Вздох.

Приветствия. Кит.

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