dna*_*oli 11 .net c# asp.net-mvc search
我正在使用C#和Razor开发ASP.NET MVC 3应用程序.
我有一个看起来像这样的搜索表单:

搜索表单以下列方式工作:
第一个下拉列表中的选择直接与我的ADO.NET Entity Framework模型类中的属性相关(因此直接与表列相关).
用户需要能够在搜索时明确选择哪个属性和哪个匹配方法,例如用户将明确搜索等于'132'的进程号的所有匹配.
我的第一种方法是使用动态linq从搜索条件构造Where子句(参见我原来的问题).但是我开始认为这不是最好的方法.
我也希望有一个解决方案,不需要我为每个属性+匹配标准组合硬编码结果.
有关如何实施此搜索的任何建议?它不必使用我当前的搜索表单,完全接受符合要求的任何其他想法.
您可以使用代码为 where 谓词构建表达式树。例如,
public static IQueryable<T> DynamicWhere<T>(this IQueryable<T> src, string propertyName, string value)
{
var pe = Expression.Parameter(typeof(T), "t");
var left = Expression.Property(pe, typeof(T).GetProperty(propertyName));
var right = Expression.Constant(value);
// Illustrated a equality condition but you can put a switch based on some parameter
// to have different operators
var condition = Expression.Equal(left, right);
var predicate = Expression.Lambda<Func<T, bool>>(condition, pe);
return src.Where(predicate);
}
Run Code Online (Sandbox Code Playgroud)
将其用作Orders.DynamicWhere(searchBy, searchValue). 您可以再添加一个参数来接受等于、大于等运算符来完成该功能。
请参阅这些链接以获取更多信息:
http://msdn.microsoft.com/en-us/library/bb882637.aspx
http://msdn.microsoft.com/en-us/library/bb397951.aspx
另请检查Expression 类的方法列表以了解情况。