2013-03-30 34 views
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然後添加另一個,但是當我嘗試我得到拋出的異常時。

我試圖用WhereWhereRestrictionOnAnd - 我也試着移動typeFiltersearchString塊以上,但他們都給予同樣的結果 - 這是個例外。

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)); 

回答

2

使用Enum.TryParse

TheEnum enumType; 
if (!string.IsNullOrWhiteSpace(typeFilter)) 
    query = query.And(c => Enum.TryParse<TheEnum>(typeFilter, out enumType) && enumType== c.ComponentType) 
+0

無法編譯,但我試圖重組,但結束了關於未定義的變量相同的錯誤。 '如果(!string.IsNullOrWhiteSpace(typeFilter)) 查詢= query.Where(C =>(Enum.Parse(typeof運算(ComponentIndexViewModel.ComponentCode),c.ComponentType.ToString()))。的ToString()== typeFilter) ;' –

+0

你可以在裏面放一個斷點,看看ComponentType在那一點上是什麼? –

+0

在'typeFilter'值是一個枚舉的有效字符串表示,但調試器不會分解的表達,以確定'c.ComponentType'是什麼。 –

相關問題