1
我正在構建一個查詢來返回匹配過濾器值的組件,但是當我嘗試添加一個新的過濾器時碰到了構建NHibernate查詢拋出 - 從範圍''引用的類型變量'x',但它沒有被定義
類型變量「C」「組件」從範圍'引用,但它沒有定義
我已經慢慢建立了查詢,並具有下列工作,因爲我想
public ActionResult Index(string searchString, string typeFilter)
{
Supplier supplierAlias = null;
var query = Session.QueryOver<Component>()
.JoinAlias(x => x.Supplier,()=> supplierAlias);
if (!string.IsNullOrWhiteSpace(searchString))
query = query.WhereRestrictionOn(c => c.Name)
.IsInsensitiveLike(String.Format("%{0}%", searchString));
switch (sortOrder)
{
case "Component desc":
query = query.OrderBy(c => c.Name).Desc;
break;
case "Type":
query = query.OrderBy(c=>c.ComponentType).Asc;
break;
case "Type desc":
query = query.OrderBy(c=>c.ComponentType).Desc;
break;
default:
query = query.OrderBy(c => c.Name).Asc;
break;
}
var result = query.List();
return View(result);
}
但現在我想加入到這個選項供用戶選擇Type
過濾到用同樣的方法爲searchString
目前有條件地用於添加在哪裏。如果給出typeFilter
然後添加另一個,但是當我嘗試我得到拋出的異常時。
我試圖用Where
,WhereRestrictionOn
和And
- 我也試着移動typeFilter
塊searchString
塊以上,但他們都給予同樣的結果 - 這是個例外。
if (!string.IsNullOrWhiteSpace(typeFilter))
query = query.And(c=>c.ComponentType.ToString() == typeFilter);
ComponentType
是我希望允許用戶過濾的枚舉。
編輯(答案)
OK的回答是使用Enum.Parse
作爲羅布庚說;這是一個有點「繁瑣」,所以我張貼代碼,在這裏工作的因爲它更容易讀到這裏比在註釋。
query = query.Where(c=> c.ComponentType == (Component.ComponentCode)Enum.Parse(typeof(Component.ComponentCode), typeFilter));
無法編譯,但我試圖重組,但結束了關於未定義的變量相同的錯誤。 '如果(!string.IsNullOrWhiteSpace(typeFilter)) 查詢= query.Where(C =>(Enum.Parse(typeof運算(ComponentIndexViewModel.ComponentCode),c.ComponentType.ToString()))。的ToString()== typeFilter) ;' –
你可以在裏面放一個斷點,看看ComponentType在那一點上是什麼? –
在'typeFilter'值是一個枚舉的有效字符串表示,但調試器不會分解的表達,以確定'c.ComponentType'是什麼。 –