仍然真的在這方面掙扎並且似乎正在圍繞着圈子。動態LINQ倍數在哪裏子句
我有以下代碼,這是驅使我堅果。它應該填充在自動完成文本框使用的項目清單:
public string[] GetAutoComplete(string prefixText, int count)
{
string memberid = HttpContext.Current.Session["MemberID"].ToString();
string locationid = HttpContext.Current.Session["LocationID"].ToString();
string inhouse = HttpContext.Current.Session["Inhouse"].ToString();
string supplier = HttpContext.Current.Session["Supplier"].ToString();
string groupw = HttpContext.Current.Session["Group"].ToString();
string external = HttpContext.Current.Session["External"].ToString();
MyEnts autocomplete = new MyEnts();
var r = from p in autocomplete.tblAutoCompletes
where p.MemberId == memberid && p.LocationId == locationid && p.ACItem.Contains(prefixText)
select p.ACItem;
if (inhouse == "Inhouse")
r = r.Where(p => p == inhouse);
if (supplier == "Supplier")
r = r.Where(p => p == supplier);
if (groupw == "Group")
r = r.Where(p => p == groupw);
if (external == "External")
r = r.Where(p => p == external);
r.OrderBy(p => p);
return r.ToArray();
我試圖檢索與動態,其中沿着以下的線路條款。
如果inhouse =「Inhouse」,那麼項目列表應包含單詞「Inhouse」。如果inhouse!=「Inhouse」,則應將「Inhouse」一詞從列表中排除。
這個相同的邏輯應該適用於不同的地方條款,即供應商,集團,外部。
我真的嘗試了很多不同的方法,但我不能爲我的生活得到的東西工作,這有點令我沮喪。
如果任何人都可以建議這樣做的話,如果我們的路徑跨越,你會得到一個大吻或大冷冰冰的啤酒。
我不明白你的目標,如果'ACItem'包含前綴文本,那麼你肯定會希望所有這樣做。其次,可以從你的代碼中假設ACItem是從你的對象返回的字符串,所以你的後續比較將失敗,除非ACItem是「Inhouse」,「Supplier」,「Group」或「External」。實際上,您正在創建一個例程來爲4個單詞提供自動完成。正如我懷疑的那樣,ACItem比字符串更復雜嗎? – Lazarus 2010-08-17 11:17:03
除了別的,你的訂單什麼都不做 - 你需要'r = r.OrderBy(p => p);' – 2010-08-17 11:22:11
Hello Lazarus(做得很好,從死路上回來,很棒的回來)。 ACItem是一個包含要返回的自動完成項目列表的列。我的場景包括用戶首選項(通過會話),我可能想要限制用戶可以訪問的內容。因此,如果他們不被允許看到Inhouse,自動完成列表將不會顯示這些項目。 如果對我這樣的傻瓜來說不可能,或者非常棘手,我可能會最終將它們留在列表中,並在選擇該項目後進行一些驗證。 – 2010-08-17 11:23:03