在我的腳本中,我動態地構建了一個字符串,然後將該字符串傳遞給LINQ TO ENTITIES
語句的WHERE
子句。當語句運行時,它找不到任何結果,我找不到原因。如果我明確地將一個值硬編碼到傳入該語句的變量中,它可以正常工作,但如果我讓系統爲我構建它,它將失敗。爲什麼這是失敗的?當WHERE子句有特殊字符時,LINQ查詢不返回結果
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查詢失敗時,動態設置名稱,但不是靜態的。我需要能夠動態設置經理姓名並將其傳遞給查詢,以便我可以正確地將員工關聯到經理。
我很抱歉,但你從哪裏撿起這一切壞的命名約定。 'var CurrentUser ...'應該是'var currentUser'。它使您的示例代碼SUPER難以閱讀。 – Phill
'Manager'的價值是什麼?你試過調試它嗎? 「經理」屬性中是否有可能沒有等號? – juharr
@juharr我已經調試過了,沒有錯誤發生,並且'Manager'總是被設置爲'Company \\ First'格式的正確值。最後'(C#似乎在逃避反斜槓) – Matthew