簡體   English   中英

LINQ for CRM如何在where子句中使用C#list

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM