2017-06-12 65 views
-1

我想從3個表中使用LINQ返回一個IEnumerable<PortalUser>但沒有太多運氣的數據。當我想返回的結果,這是IQueryable<PortalUser>型的,我不知道我應該爲了達到我的目標是做:LINQ IQueryable到IEnumerable

public Task<IEnumerable<PortalUser>> GetUsers(string accountCode) 
{ 
    var res = from u in _db.Users 
       join ur in _db.UserRoles on u.ContactGuid equals ur.ContactGuid 
       join r in _db.Roles on ur.RoleId equals r.Id 
       where ur.AccountCode == accountCode 
       select(new PortalUser(u.Id, u.FriendlyName, u.UserName, r.RoleName)); 
    return res; 
} 

在我的選擇,我嘗試使用PortalUser構造函數使PortalUsers,並認爲這會給我我想要的,但顯然不是。

public class PortalUser 
{ 
    public PortalUser(int id,string friendlyName,string username,string rolename) 
    { 
     Id = id.ToString(); 
     Firstname = friendlyName.Split(' ')[0]; 
     Lastname = friendlyName.Split(' ')[1]; 
     Username = username; 
     Role = rolename; 
    } 

    public string Id { get; set; } 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
    public string Username { get; set; } 
    public string Role { get; set; } 
} 

我得到這個錯誤:

Cannot implicitly convert type 'System.Linq.IQueryable<BSAR.Services.Models.Outbound.Full.PortalUser>' to 'System.Threading.Tasks.TaskSystem.Collections.Generic.IEnumerable<BSAR.Services.Models.Outbound.Full.PortalUser'> . An explicit conversion exists (are you missing a cast?)

+0

難道你不明白什麼錯誤消息?它期待着一個'任務',但你沒有提供一個'任務'。你不能那樣做。 – Servy

+1

你能改變返回類型嗎?如果沒有,爲什麼不標記方法'async'和'return awa.res.ToListAsync()'?你最近想做什麼? – CodeCaster

回答

0

GetUsers不返回任務 - 因此你必須改變返回類型IEnumerable<PortalUser>

public IEnumerable<PortalUser> GetUsers(string accountCode) 
{ 
    var res = from u in _db.Users 
     join ur in _db.UserRoles on u.ContactGuid equals ur.ContactGuid 
     join r in _db.Roles on ur.RoleId equals r.Id 
     where ur.AccountCode == accountCode 
     select (new PortalUser(u.Id, u.FriendlyName, u.UserName, r.RoleName)); 
    return res; 
} 
+0

非常感謝快速回復,我現在看到哪裏出了問題,我會盡快接受答案 – mjmendes

+1

@mjmendes我建議不要接受實際上不起作用的答案,因爲它只會導致未來遇到問題的讀者解決方案,並可能被欺騙,認爲這是一個可行的解決方案。 – Servy

+0

@Servy Soooo ...什麼不行? – MetaColon

1

做什麼CodeCaster建議「你可以改變返回類型嗎?如果沒有,爲什麼你不標記方法異步並返回等待res.ToListAsync()?你真的想要做什麼?「

public async Task<IEnumerable<PortalUser>> GetUsers(string accountCode) 
    { 
     var res = from u in _db.Users 
        join ur in _db.UserRoles on u.ContactGuid equals ur.ContactGuid 
        join r in _db.Roles on ur.RoleId equals r.Id 
        where ur.AccountCode == accountCode 
        select (new PortalUser(u.Id, u.FriendlyName, u.UserName, r.RoleName)); 
     return await res.ToListAsync(); 
    } 

這解決了我的問題,謝謝