有關使用IQueryable對象的快速問題。我可以做那樣的事情嗎?如果沒有,可以採用哪種方式?順序過濾IQueryable實例
IQueryable<Item> q = this.ObjectContext.items;
q = q.Where(i => i.price > 100);
...
q = q.Where(i => i.class_name.Contain("apple"));
更新:這裏是我的功能完整的代碼(可能是我想的東西):
public IQueryable<item> Getitem(string filter)
{
// filtering by user departments
IQueryable<item> pre_q = from t_item in this.ObjectContext.items
join t_useritems in this.ObjectContext.user_to_item on
t_item.number equals t_useritems.number
where t_useritems.user_name == this.userName
select t_item;
if (filter != null)
{
QueryFilter qf = new QueryFilter(filter);
string _excludeClass = qf.GetPropertyValueByName("excludeClass");
string _excludeSubcat = qf.GetPropertyValueByName("excludeSubcat");
string _searchBy = qf.GetPropertyValueByName("searchby");
string _search = qf.GetPropertyValueByName("search");
if (!string.IsNullOrEmpty(_excludeClass))
pre_q = pre_q.Where(i => i.class_name != _excludeClass);
if (!string.IsNullOrEmpty(_excludeSubcat))
pre_q = pre_q.Where(i => i.subcat_name != _excludeSubcat);
if (!string.IsNullOrEmpty(_searchBy) && !string.IsNullOrEmpty(_search))
{
if (_searchBy == "number")
pre_q = pre_q.Where(i => i.number.Contains(_search));
else if (_searchBy == "description")
pre_q = pre_q.Where(i => i.description.Contains(_search));
else if (_searchBy == "class_name")
pre_q = pre_q.Where(i => i.class_name.Contains(_search));
else if (_searchBy == "cat_name")
pre_q = pre_q.Where(i => i.cat_name.Contains(_search));
else if (_searchBy == "subcat_name")
pre_q = pre_q.Where(i => i.subcat_name.Contains(_search));
else if (_searchBy == "all_fields")
pre_q = pre_q.Where(i => i.number.Contains(_search) ||
i.description.Contains(_search) ||
i.class_name.Contains(_search) ||
i.cat_name.Contains(_search) ||
i.subcat_name.Contains(_search));
}
}
}
return pre_q.OrderBy(i => i.number);
}
本質上發生了什麼 - 我通過excludeClass過濾器和一些搜索文本過濾器。在應用excludeClass後,我可以看到記錄的數量是正確的,但是當我在應用搜索過濾器後 - 它基本上重置已經過濾的項目,並且他們回到結果中。
更新是好的,但仍然需要看到某種「這裏是我的輸入,這裏是我的TSQL,看起來:這個位應該被過濾,但它不是」 –
這個方法調用excludeFilter = someName, searchBy = number,search = someText。如果searchBy和搜索沒有設置它工作正常 - 我收回只有class_name不是someName的記錄。但是,如果我傳遞searchBy/search,那麼我也會返回class_name == someName的記錄。我在哪裏可以獲得TSQL? – sha
SQL跟蹤將是一個好的開始。如果這是LINQ到SQL,那麼可以非常輕鬆地得到它;與EF,只是SQL分析器更簡單。 –