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