怎麼用的「X」,如果塊變量?如果語句爲真,我想返回x的Id字段。使用LINQ變量斷章取義
if (UserList.Any(x => x.Type == (int)UserType.SuperUser))
{
return x.Id;
}
怎麼用的「X」,如果塊變量?如果語句爲真,我想返回x的Id字段。使用LINQ變量斷章取義
if (UserList.Any(x => x.Type == (int)UserType.SuperUser))
{
return x.Id;
}
您不能在lambda表達式外訪問「LINQ變量」。
你想要做的是獲得任何元素x
的Id
屬性,它包含條件x.Type == (int)UserType.SuperUser
。
在這種情況下,更換您的Any()
通過FirstOrDefault()
。
var item = UserList.FirstOrDefault(x => x.Type == (int)UserType.SuperUser);
if(item != null)
return item.Id;
FirstOrDefault(x => condition on x)
回報satsify病情及null
如果沒有元素滿足條件的第一個元素。
如果你想獲得符合條件的所有元素的Id
值,使用Where
和Select
extention方法:
return UserList.Where(x => x.Type == (int)UserType.SuperUser).Select(x => x.Id);
Where(x => condition(x))
返回包含如果你prefere滿足條件的所有元素的IEnumerable
得到一個「正常」的名單,;
前加ToList()
。
多少場比賽,你希望:即有多少用戶在列表中你希望擁有超級用戶類型?
如果你認爲會有匹配(所以有零個匹配用戶或一個以上匹配的用戶將是一個錯誤)只有一個用戶,然後利用單:
return UserList.Single(x => x.Type == (int)UserType.SuperUser).Id;
(請注意,這將引發異常,如果不是正好有一個匹配的用戶;或者你可以使用的SingleOrDefault然後測試空)
如果你認爲會有一個或多個,你只想返回第一個:
return UserList.First(x => x.Type == (int)UserType.SuperUser).Id;
。
(注意:如果不是正好有一個匹配的用戶,這將拋出一個異常;或者您可以使用FirstOrDefault,然後測試空)
如果你認爲會有一個或更多,您想返回所有匹配用戶的所有ID數組:
return UserList.Where(x => x.Type == (int)UserType.SuperUser).Select(u => u.Id).ToArray();
剛添加已發佈的好答案。
爲了從薩姆Holloways最後一個代碼示例答案看起來像你使用的是X直接,你可以重寫到類似SQL的語法(不記得什麼叫):
IEnumerable<int> userIds = from x in UserList
where x.Type == UserType.SuperUser
select x.Id;
您可以使用的用戶id的計數方法,以確定是否有滿足你的病情的人。
既然你正在返回的ID,和我猜的ID是一個int,你將不得不反正返回的東西,而且我猜你會回到0,如果它不存在,你可以使用:
return UserList.Where(x => x.Type == UserType.SuperUser).Select(x => x.Id).FirstOrDefault();
一些更多的信息會很好.... – Vogel612