[英]LINQ for CRM how to use C# list in where clause
我需要在LINQ where子句中使用C#列表。 我可以在where子句中使用一個值進行查詢,請指導如何在LINQ查詢中使用C#列表。
以下是我的代碼:
var usersList= new List<string>();
usersList.Add("User1");
usersList.Add("User2");
(from u in UserSet
where u.FullName.Equals("any user from usersList")
select u.FullName).Take(3).Dump();
基本上如何告訴LINQ檢查usersList
每個值
編輯:我正在做這個LINQ for CRM
謝謝
你可以使用Contains
var usersList= new List<string>();
usersList.Add("User1");
usersList.Add("User2");
...
(from u in UserSet
where usersList.Contains(u.FullName)
select u.FullName).Take(3)
Enumerable.Contains方法(IEnumerable,TSource)
使用默認的相等比較器確定序列是否包含指定的元素。
更新
我無法看到在內存列表中使用Contains的方法。 但是,如果用戶列表不是太大,您可以在內存中執行此操作
var results = (from u in UserSet
select u.FullName);
var results (from r in results
where usersList.Contains(r)
select r).Take(3);
必須有更好的方法。
您不能將Contains方法與LINQ for Dynamics CRM一起使用。 一般是正確的,您可以將整個實體集帶入內存,然后執行您的包含方法。 然而,這是低效的 - 特別是當系統上線后實體設置增加時。
我假設您正在使用早期綁定上下文,這就是您想要使用LINQ的原因,如果這是正確的,那么選項將是執行如下操作:
var usersList= new [] {
"User1",
"User2"
};
var systemUserQuery = new QueryExpression{
EntityName = SystemUser.EntityLogicalName,
ColumnSet = new ColumnSet("fullname","domainname" ....), //explicitly retrieve attributes
Criteria = {
Conditions = {
new ConditionExpression("fullname", ConditionOperator.In, userList)
}
}
};
var usersResponse = organizationService.RetrieveMultiple(systemUserQuery);
var systemUsers = usersResponse.Entities.Select(s => (SystemUser)s).ToArray();
這不會在表達式中使用LINQ來檢索數據,但是查詢是遠程執行的,您不需要檢索整個實體集。 在語句var systemUsers = usersResponse.Entities.Select(s => (SystemUser)s).ToArray();
對象類型Microsoft.Xrm.Sdk.Entity
將被SystemUser
為早期綁定類型SystemUser
,您可以像繼續任何其他早期綁定對象一樣繼續使用這些對象。
使用ConditionOperator.In
運算符時,提供的值將需要是一個數組。 您可以將userList
變量聲明為List<string>
如示例所示。 但是,在將對象添加到查詢中之前,您需要將其強制轉換。
只需注意ColumnSet = new ColumnSet("fullname","domainname" ....)
,您可以在其中選擇要在請求中檢索的屬性。 如果您未在此處指定屬性,則屬性將是強制轉換后的默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.