2012-04-12 3 views
11

로 번역 할 수없는 것은 내가 할 노력하고있어입니다 메서드가 List<int>을 반환 할 때 List<int?>을 반환 할 수 없기 때문에 Int32로 변환해야합니다.LINQ는 상점 표현 여기

간단한 문제를 해결하는 방법에 대한 제안 사항이 있으십니까? 대신이의

+0

나는'Convert' 기능 엔티티에 LINQ 작동하지 않습니다 생각, 당신은'db.AccountRules을 할 수있는 가능성이있다. AsEnumerable()'그리고 나머지는 – V4Vendetta

답변

19

:

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

이를 수행

Select(a => a.RoleId.Value) 

이유는 오류 설명이다; IQueryable을 통해 이러한 쿼리를 수행 할 때 선택기 내에서 사용되는 메서드는 SQL 쿼리 나 함수로 변환 할 수 있어야합니다. 이 경우 Convert.ToInt32()은 그런 방법이 아닙니다. 그러나 null이있는 int 필드의 경우 .NET .Value 속성을 사용하면 작동합니다.

RoldIdnull 인 경우에는 작동하지 않습니다. InvalidOperationException이 표시됩니다. 당신은 백업 필드가 null 대신하는 경우 설정 값을 반환 할 수 있습니다 : 하나, 그리고 int.MinValue없는 경우가있는 경우

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

이이 값을 반환합니다.

5

사용이 : 선택 db.Accounts에서 목록 개체를 가지고 물건을 할 수 (A => (INT) a.RoleId)

+0

이것은 나를 위해 일했다. @ 앤드류 버버 (AndrewBarber)의 대답은 그렇지 않았습니다. 고맙습니다. – user2330678

+0

네,이 사람은 다른 사람이하지 않은 곳에서 일했습니다 - 고마워요. – Lyall

0

보십시오. 그것은 나를 위해 작동합니다. 대신이의

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(); 
} 

, 노력이 ..

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(); 
    }