2016-08-03 68 views
0

我創建一個LINQ語句像下面在LINQ中,對於where子句是否重要?

from c2 in context.AspNetRoles 
join c1 in context.RoleActions 
on c2.Id equals c1.RoleId 
where c2.UserId == System.Web.HttpContext.Current.User.Identity.GetUserId() 
select new { c2.Name }; 

注意C2首先出現。問題是

c2.UserId 

未顯示智能。這是LINQ中的一種常見行爲。我怎麼才能修正上面的LINQ語句,順序很重要?在where子句中有join應該在最後一次加入表格標識符?

感謝

+0

我不明白你。如果你想返回多個字段,你必須像這樣輸入:'select new {c2.Name,c2.Intelligence}'。那是你想要達到的目標嗎? –

+0

訂單在智能感知方面無關緊要。你能展示什麼是'context.AspNetRoles'的類型? –

+0

爲什麼你需要加入c1只是你想檢索c2.Name? – Julia

回答

0

如果我理解你很好...

你可以用拉姆達混合查詢的標準符號。所以,如果你想過濾context.AspNetRoles再加入context.RoleAction,你可以嘗試這樣的事情:

var result = from c2 in context.AspNetRoles.Where(x=>x.Field=="SomeValue" 
        && x.UserId == System.Web.HttpContext.Current.User.Identity.GetUserId()) 
join c1 in context.RoleActions on c2.Id equals c1.RoleId 
select new { c2.Name }; 
0

爲什麼,如果你只需要一個價值加入?也許嘗試這樣的:

var result = context.AspNetRoles 
    .Where(o => context.RoleActions.Any(oo => oo.RoleId == o.Id) && 
     o.UserId == System.Web.HttpContext.Current.User.Identity.GetUserId()) 
    .Select(o => o.Name) 
    .ToList();