[英]Linq Query that returns IQueryable
我有一個方法叫做
public static IQueryable GetUsers()
使用Linq查詢。
{SELECT [t0].[ApplicationUserId], ([t0].[LastName] + @p0) + [t0].[FirstName] AS [UserName], [t1].[SecurityRoleName], [t2].[UserStatus]
FROM [dbo].[ApplicationUsers] AS [t0]
INNER JOIN [dbo].[SecurityRoles] AS [t1] ON [t0].[SecurityRoleId] = [t1].[SecurityRoleID]
INNER JOIN [dbo].[UserStatusLookups] AS [t2] ON [t0].[UserStatusId] = [t2].[UserStatusLookupID]
ORDER BY [t0].[LastName]
}
返回所有用戶。 我無法更改此方法或類。
我需要一個屬於特定安全角色的用戶。 從IQueryable中,我就能獲得特定的用戶。 因此[t1].[SecurityRoleID]
被替換為15。
您不能使用Where
因為它僅在IQueryable<T>
(強類型版本)上定義。 您需要將IQueryable
從GetUsers()
轉換為適當的IQueryable<T>
:
var users = GetUsers().Cast<ModelType>();
ModelType
應該是GetUsers
中模型對象的任何類型; 它應該具有SecurityRoleID
, ApplicationUserId
或所需的任何屬性。
然后,您可以使用LINQ擴展方法:
var user = users.Where(u => u.SecurityRoleID == 15);
或者可能:
var user = users.FirstOrDefault(u => u.SecurityRoleID == 15);
應該這樣做:
var Role15Users = GetUsers().Where(t => t.SecurityRoldID == 15);
您可以在完整列表中使用一個位置
var users = MyClass.GetUsers();
var userInRole = users.Where(u=>u.SecurityRoleId == 15);
你有
using System.Linq
在您的包括?
Where<TSource> Method (IQueryable<TSource>, Expression<Func<TSource, Boolean>>)
是System.Linq命名空間中IQueryable類型的擴展方法。
也很可能在類中沒有SecurityRoleId
屬性,而是對象關系。 在這種情況下,您將必須編寫類似
var roleUsers = dataSource.GetUsers().Where(
u => u.SecurityRole.Id == 15
);
它將返回所有角色為15的用戶。
但是,您必須確定魔術數是錯誤的。
如果要查找一個名為Admin
角色的單個用戶,請確保正確映射了SecurityRole(取決於您尚未發布的類結構),並執行類似的操作
var admin = (from user in dataSource.GetUsers()
where user.SecurityRole.Name == "Administrator"
select user).Single(); // will throw exception if none or multiple are found
var admin = (from user in dataSource.GetUsers()
where user.SecurityRole.Name == "Administrator"
select user).SingleOrDefault(); // will return null if none, throw exception if multiple are found
您還可以用方法調用方式重寫這些查詢:
var admin = dataSource.GetUsers()
.Where(u => u.SecurityRole.Name == "Administrator")
.Single(); // will throw exception if none or multiple are found
var admin = dataSource.GetUsers()
.Where(u => u.SecurityRole.Name == "Administrator")
.SingleOrDefault(); // will return null if none, throw exception if multiple are found
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.