2014-08-28 2 views
4

Я в процессе преобразования моего приложения диаграммы из заданных данных в базу данных.Возврат запроса Linq в список ключей KeyValuePair

Раньше я использовал это:

var data = new Dictionary<string, double>();    

switch (graphselected) 
{   
case "1": 
    data = new Dictionary<string, double> 
    { 
     {"Dave", 10.023f}, 
     {"James", 20.020f}, 
     {"Neil", 19.203f}, 
     {"Andrew", 4.039f}, 
     {"Steve", 5.343f} 
    }; 
    break; 
case "2": 
    data = new Dictionary<string, double> 
    { 
     {"Dog", 10.023f}, 
     {"Cat", 20.020f}, 
     {"Owl", 19.203f}, 
     {"Rat", 16.039f}, 
     {"Bat", 27.343f} 
    }; 
    break; 
//etc... 
} 

// Add each item in data in a foreach loop 
foreach (var item in list) 
{ 
    // Adjust the Chart Series values used for X + Y 
    seriesDetail.Points.AddXY(item.Key, item.Value); 
} 

И это то, что я пытаюсь сделать: По

var list = new List<KeyValuePair<string, double>>(); 

switch (graphselected) 
{ 
case "1": 
    var query = (from x in db2.cd_CleardownCore 
       where x.TimeTaken >= 10.0 
       select new { x.IMEI, x.TimeTaken }).ToList(); 
    list = query;     
    break; 
//... 
} 

Мой код ошибки в:

list = query; 

с ошибкой:

Cannot implicitly convert type 'System.Collections.Generic.List<AnonymousType#1>' 
to 'System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string,double>>' 

Как осуществить преобразование?

+5

ли 'новый {x.IMEI, x.TimeTaken}' выглядеть как KeyValuePair к вам? –

+0

Взято из другого сообщения: «LINQ нуждается в конструкторе без параметров, потому что он хочет использовать инициализацию коллекции (скобки {}). У вас могут быть дополнительные конструкторы классов, но LINQ не будет их использовать». Насколько я понимаю, именно по этой причине его отформатировали, как в моем коде. Источник: http://stackoverflow.com/questions/15382840/only-parameterless-constructors-and-initializers-are-supported-in-linq-to-entiti – Baggerz

ответ

16

Если вам нужен список keyvaluepair, вам нужно построить его хорошо, keyvaluepairs! заменить объект Anonymous в избранных как таковой:

select new KeyValuePair<string,double>(x.IMEI,x.TimeTaken) 

отредактирована для ваших новых вопросов:

var q = (from x in db2.cd_CleardownCore 
      where x.TimeTaken >= 10.0 
      select new { x.IMEI, x.TimeTaken }); 
var query = q.AsEnumerable() // anything past this is done outside of sql server 
     .Select(item=>new KeyValuePair<string,double?>(item.IMEI,item.TimeTaken)) 
     .ToList(); 
+1

Здравствуйте, Ронан, благодарю вас за помощь, я попытался использовать код выше но из-за того, что мой двойник недействителен, я получаю: Аргумент 2: невозможно преобразовать из 'double?' to 'double' Я попытался изменить это на выбрать новый KeyValuePair (x.IMEI, (double) x.TimeTaken)) ToList(); , но теперь это дает следующую ошибку: В LINQ для Entities поддерживаются только конструкторы и инициализаторы без параметров. – Baggerz

+0

Если ваши значения могут быть нулевыми, нет никакого смысла бросать их в любом случае, просто используйте код, который я вам дал, и вместо этого измените тип вашей переменной списка, чтобы быть совместимым как таковой var list = new List >(); –

+0

спасибо ronan, я попробовал выше, но тогда он не любит двойной в выборе нового KeyValuePair (x.IMEI, x.TimeTaken) , поэтому я изменил его, чтобы выбрать новый KeyValuePair (X. IMEI, x.TimeTaken) Однако, когда код запускается, я получаю ту же ошибку: в LINQ to Entities поддерживаются только конструкторы и инициализаторы без параметров. – Baggerz

Смежные вопросы