我是c#的新手,这是我的问题。 我已经让用户从下拉列表中选择他们的搜索选项。我正在通过 Searchterm & SearchBy 在我的搜索方法中作为字符串参数。
(Get()方法返回项目的DbSet
)
public virtual IQueryable<Item> Search(string searchTerm, string searchBy)
{
if (searchBy == "Name")
{
var item = Get().Where(i => i.Name.Contains(searchTerm));
return item;
}
if (searchBy == "Category")
{
var item = Get().Where(i => i.Category.Contains(searchTerm));
return item;
}
}
名称,类别属于项目模型。 我想要的是直接使用searchBy参数而不是检查 if(searchBy ==“Name”)。 它应该与此类似。
var item = Get().Where(i => i.searchBy.Contains(searchTerm));
有可能吗?请咨询!
答案 0 :(得分:0)
您可以尝试使用linq动态查询库,如Scott Guthrie的blog所述:
var item = Get().Where("@0.Contains(@1)", searchBy, searchTerm);
答案 1 :(得分:0)
此代码允许您在对象中动态搜索:
private static List<T> Search<T>(string searchFor, string searchBy, List<T> searchIn)
{
return searchIn.Where(i => i.GetType().GetProperty(searchBy).GetValue(i).ToString().Contains(searchFor)).ToList();
}
这是如何使用它:
Console.WriteLine(Search<Users>("1", "ID", user).FirstOrDefault().Name); Console.ReadLine();
注意现在你不关心对象是什么......