2013-03-07 36 views
1

我有一個使用linq to crm在Crm 2011(IFD)中通過用戶名 查詢系統用戶的win應用程序。我有下面的代碼片斷,它顯示了我正在嘗試 來完成。該方法執行時沒有錯誤,但是沒有找到記錄。 用戶名顯示爲「domain \ testuser」om CRM。Linq to Crm(2011)通過用戶名爲系統用戶進行故障搜索

public static SystemUser LookUpSystemUser() 
    { 
     var username= "domain\\testuser"); 

     var list = (from c in Context.CreateQuery<SystemUser>() 
        where c.DomainName.Equals(username) 
        select c).ToList(); 

     return list.FirstOrDefault(); 
    } 
+2

如果您刪除'where',您會得到任何結果嗎? – 2013-03-07 02:07:12

+0

另一個選擇是找到你想在CRM中找到的用戶,並通過它的Guid檢索用戶,並檢查它的域名以查看爲什麼找不到它。 – Daryl 2013-03-07 05:18:04

+0

你的情況正確嗎?您可以嘗試c.DomainName.Equals(username,stringcomparison.ignorecase) – 2013-03-11 19:27:56

回答

3

重新創建應用程序似乎解決了這個問題。仍然沒有代碼差異,所以仍然不確定發生了什麼。

+0

你有沒有更改你的數據庫排序規則?不同的整理可能會導致區分大小寫的變化,從而給出不同的結果。 – 2013-06-17 11:23:30

1

這個真沒有回答你的問題,並在特定情況下它真的會無關緊要的,因爲在那裏只爲每一個域名SystemUser,但它是一個最好的做法。

在您的LINQ語句中調用ToList()時,它將返回SQL數據庫中與查詢匹配的所有實體。然後調用FirstOrDefault()將返回第一個客戶端。

而不是在只有一個感興趣的時候致電ToList(),請致電FirstOrDefault()。這實際上會導致Top 1被添加到select查詢中。這將導致SQL服務器,CRM Web服務器以及SQL服務器,CRM Web服務器和客戶端之間傳輸的數據消耗更少的資源。

+0

謝謝我已將此應用於代碼的其他部分。 – noobie 2013-03-07 06:01:51

0

嘗試運行此方法(或其規範的等價物),看看你是否有任何東西。如果是這樣,那麼你可以再收緊條件選擇聲明。

public static SystemUser LookUpSystemUser() 
{ 
    return Context.CreateQuery<SystemUser>() 
    .Select(element => true) 
    .FirstOrDefault(); 
} 

記住默認(SystemUser)會產生

不在電腦裏,還沒有測試過。