2009-03-10 17 views
2

bu soruya itibaren ardından:Neden ToDictionary <K,V>(), SQL için LINQ ile kullanıldığında bir derleyici hatası oluşturur?

DomainID int
DomainName varchar(250)

Ben Dictionary<int, string> dönmek istiyorum:

Linq-to-SQL ToDictionary()

Ben olduğunuz bir tablo olarak adlandırılan Domains, iki sütun vardır. Ben SQL koduna aşağıdaki LINQ birini çalıştığınızda:

Dictionary<int, string> dict = 
    dbc 
    .Domains 
    .Select(d => new {d.DomainID, d.DomainName}) 
    .AsEnumerable() 
    .ToDictionary<int, string>(k => k.DomainID, k => k.DomainName); 

veya

Dictionary<int, string> dict = 
    (from d in dbc.Domains 
     select new { d.DomainID, d.DomainName }) 
     .AsEnumerable() 
     .ToDictionary<int, string>(k => k.DomainID, k => k.DomainName); 

aşağıdaki derleme hatası alıyorum:

Instance argument: cannot convert from 'System.Collections.Generic.IEnumerable<AnonymousType#1>' to 'System.Collections.Generic.IEnumerable<int>'

senaryo burada aynı görünüyor q245168 ve işe yaramalı, açık bir şey eksik miyim?

Alkış

cevap

2

genel tür argümanları kaldırmayı deneyin Kev; İşte

Dictionary<int, string> dict = 
(from d in dbc.Domains 
    select new { d.DomainID, d.DomainName }) 
    .AsEnumerable() 
    .ToDictionary(k => k.DomainID, k => k.DomainName); // <==== no angles 

, detayları tedarik genel tür çıkarsama kullanıyor: ilk değil anahtar, kaynak olduğunu.

+0

Aaahh! şimdi çok açık. Takdir. – Kev

+0

AsEnumerable() gerekli mi? – Svish

+0

@Svish: görünmüyor. – Kev

İlgili konular