2012-04-12 29 views
11

tercüme edilemez benim yapmaya çalıştığım şey de bu yöntemi, bir List<int> döndürdüğünde bir List<int?> döndüremediğinden Int32'ye dönüştürmek için.LINQ bir mağaza ifadesi İşte

Bu basit sorunun nasıl çözüleceğine dair herhangi bir öneriniz var mı? Bunun yerine

+0

ben 'Convert' fonksiyonları LıNQ varlıkları ile çalışmaz düşünüyorum, bir' db.AccountRules yapabileceği mümkündür. AsEnumerable() 've geri kalan – V4Vendetta

cevap

19

:

Select(a => Convert.ToInt32(a.RoleId)) 

yapın:

Select(a => a.RoleId.Value) 

nedeni hatası açıklamasında ise; Bu sorguları IQueryable üzerinden yaptığınızda, seçici içinde kullanılan yöntemlerin bir SQL sorgusuna veya işlevine dönüştürülebilen bir şey olması gerekir. Bu durumda Convert.ToInt32() böyle bir yöntem değildir. alanları için null izin verilen, .NET .Value özelliğini kullanarak çalışır.

Ancak, RoldId ürününüz null ürününün çalışıyorsa bu durumun çalışmadığını unutmayın. Bir InvalidOperationException alırsınız. Sen arka alan null onun yerine bir dizi değeri döndürmek isteyebilirsiniz: bir, ve int.MinValue değilse varsa

Select(a => a.RoleId.HasValue ? a.RoleId.Value : int.MinValue) 

Bu değeri döndürecektir.

5

bunu kullanın: Seç db.Accounts gelen Liste nesnesi alıp şeyler yapmak için (a => (int) a.RoleId)

+0

Bu benim için çalıştı. @ AndrewBarber'ın cevabı yoktu. Teşekkürler muthuvel. – user2330678

+0

Evet, başkalarının yapmadığı yerde işe yaradı - teşekkürler – Lyall

0

deneyin. Benim için çalışıyor. Bunun yerine

public List<int> GetRolesForAccountByEmail(string email) 
{ 
    var account = db.Accounts.SingleOrDefault(a => a.Email == email); 
    if (account == null) return new List<int>(); 
    return db.AccountRoles.Where(a => a.AccountId == account.AccountId).Select(a => Convert.ToInt32(a.RoleId)).ToList(); 
} 

, denemek bu ..

public List<int> GetRolesForAccountByEmail(string email) 
    { 
    var account = db.Accounts.SingleOrDefault(a => a.Email == email); 
    if (account == null) return new List<int>(); 
    List<AccountRoles> accountRoles= db.AccountRoles.ToList<AccountRoles>(); 
    return accountRoles.Where(a => a.AccountId == account.AccountId).Select(a => Convert.ToInt32(a.RoleId)).ToList(); 
    }