簡體   English   中英

當WHERE子句具有特殊字符時,LINQ查詢不返回結果

[英]LINQ query not returning results when WHERE clause has special character

在我的腳本中,我正在動態構建一個字符串,然后將該字符串傳遞到LINQ TO ENTITIES語句的WHERE子句中。 語句運行時找不到任何結果,我不知道為什么。 如果我將一個值明確地硬編碼到傳遞給該語句的變量中,則它可以正常工作,但是如果我讓系統為我構建它,則它將失敗。 為什么會失敗?

for (int i = 1; i <= TotalUsers; i++)
{
    var CurrentUser = db.Users.Where(u => u.ID == i).Select(u => u.ADUserName).First();
    UserPrincipalData = UserPrincipal.FindByIdentity(Context, CurrentUser);
    var UserDirectoryData = UserPrincipalData.GetUnderlyingObject() as DirectoryEntry;

    var Manager = (string)UserDirectoryData.Properties["manager"].Value;

    if (String.IsNullOrEmpty(Manager))
    {
        Manager = @"Company\Matthew.Verstraete";
    }
    else
    {
        var StartIndex = Manager.IndexOf("=") + 1;
        var EndIndex = Manager.IndexOf(",", StartIndex);
        var Length = EndIndex - StartIndex;
        Manager = Manager.Substring(StartIndex, Length);
        Manager = @"Company\" + Manager.Replace(" ", ".");
    }

    var ManagerID = db.Users.Where(u => u.ADUserName == Manager).Select(u => u.ID).FirstOrDefault();
    var UpdatedUser = db.Users.Find(i);
    UpdatedUser.ManagerID = ManagerID;
    db.SaveChanges();
}

通過調試工作,如果IF語句是真實變量是硬編碼到我那么ManagerID從查詢設置正確,如果失敗,並轉到ELSE子句中,即使它會失敗Manager變量動態地設置為我以及。

編輯:該代碼不會在調試中引發任何錯誤。 變量Manager總是以Company\\\\First.Last形式獲取適當的值(C#似乎在轉義反斜杠)。 所以我不知道為什么動態設置而不是靜態設置名稱時LINQ查詢失敗。 我需要能夠動態設置經理姓名並將其傳遞給查詢,以便我可以將員工正確地關聯到那里的經理。

這將有助於將代碼包裝在try catch塊中,並為我們提供正在拋出的異常。

但是我的猜測是您可能會收到ArgumentOutOfRangeException

如果這是問題所在,那么對於您的StartIndex或EndIndex,您可能會得到-1,這意味着搜索的字符串不存在。

這將使您的Length變量為負數,並且在對負值使用子字符串時會導致異常。

我將逐步查看您的開始索引和結束索引的值。

索引: https ://msdn.microsoft.com/zh-CN/library/7cct0x33( v= vs.110).aspx

子字符串: https ://msdn.microsoft.com/zh-CN/library/aka44szs( v= vs.110).aspx


好的,我想我找到了問題。

因此,您在else語句中使用@符號。 但是,您說的值是Company \\\\ First.Last。 使用@符號,該字符串被視為文字,因此它將搜索“ Company \\\\ First.Last”

如果要搜索“ Company \\ First.Last”,則應從else語句中刪除@符號。

我閱讀了這篇文章以幫助我理解問題: C#中的字符串前面的@是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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