动态获取对象属性名称

时间:2014-05-12 10:41:05

标签: c# asp.net-mvc entity-framework

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

有可能吗?请咨询!

2 个答案:

答案 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();

注意现在你不关心对象是什么......

see this image