Joh*_*lly 9 entity-framework code-first entity-framework-4
所以我在Entity Framework 4中使用CTP4代码的第一个功能创建了一个模型.这一切都很好.
我正在尝试向我的应用程序添加高级搜索功能.这种"高级搜索"功能只允许用户输入多个标准进行搜索.例如:
高级产品搜索
这将允许用户按产品名称进行搜索,并根据创建日期限制结果.
问题是我不知道在任何单个搜索中将使用多少这些字段.然后如何构建我的实体框架查询?
我有一个示例描述如何为Entity Framework创建动态查询,但是这似乎不适用于我为Code First持久性创建的POCO类.
当约束数量未知时,构造查询的最佳方法是什么?
Joh*_*lly 20
所以经过几个小时的工作来解决这个问题(以及我们的朋友谷歌的一些帮助),我找到了一个可行的解决方案来解决我的问题.我创建了以下Linq表达式扩展:
using System;
using System.Linq;
using System.Linq.Expressions;
namespace MyCompany.MyApplication
{
public static class LinqExtensions
{
public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Expression<Func<TSource, bool>> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
}
}
Run Code Online (Sandbox Code Playgroud)
此扩展允许创建Linq查询,如下所示:
var products = context.Products.WhereIf(!String.IsNullOrEmpty(name), p => p.Name == name)
.WhereIf(startDate != null, p => p.CreatedDate >= startDate)
.WhereIf(endDate != null, p => p.CreatedDate <= endDate);
Run Code Online (Sandbox Code Playgroud)
这允许每个WhereIf语句仅在满足提供的条件时影响结果.解决方案似乎有效,但我总是乐于接受新的想法和/或建设性的批评.
| 归档时间: |
|
| 查看次数: |
4974 次 |
| 最近记录: |