1. 程式人生 > >Linq表達式理解錯誤

Linq表達式理解錯誤

屬性 表達 gin list() ole in use 如果 light enum

var userInfo = UserInfoService.LoadEntities(u=>u.ID==LoginUser.ID).FirstOrDefault();
            //獲取登錄用戶的角色.
var userRoleInfo = userInfo.RoleInfo;

//Linq表達式一:
var loginUserMenuActions = (from r in userRoleInfo
                                            from a in r.ActionInfo
                                            where a.ActionTypeEnum == actionTypeEnum
                                            select a).ToList();

//Linq表達式二:
var allUserActions = from r in userRoleInfo
                                select r.ActionInfo;
var mm = (from a in allUserActions
                  where a.ActionTypeEnum == actionTypeEnum
                  select a).ToList();

//Linq表達式二是錯誤的,因為執行這句where a.ActionTypeEnum == actionTypeEnum的時候,allUserActions是一個大集合裏面包含很多小集合,所以遍歷allUserActions得到變量a是一個集合。一個集合裏面沒有ActionTypeEnum這個屬性,所以a.ActionTypeEnum是錯誤的。

//但是Linq表達式一是對的,因為兩個from相當於兩次for循環,所以a不是一個集合,是一個ActionInfo

  總結:註意Linq語句from的使用,如果是集合要小心,from一次然後select得到的可能是一個集合中包著許多集合,這時候要from兩次,類似for循環兩遍

Linq表達式理解錯誤