我正在做asp.net-mvc与entity-framework应用程序。mvc实体框架选择与动态where子句
我有一个select
指令,我需要有dymanic where
条件。
这是一个常见的情况,你有一个由“aaaa bbbb cccc”字符串组成的过滤器。我需要将包含所有过滤器字符串或其一部分的所有数据。
我在做它的一部分,它与Split
功能,但它很难得到所有可能的组合。
我宁愿使用Store Procedure
。但它的用途是使用实体框架。
至于我做到了这一点。
public IEnumerable<UploadSearch> GetUploadsBySearch(string search)
{
IEnumerable<UploadSearch> viewModel = (from uploads in _db.Uploads
.Where(p => p.ProcessState_id == Security.APPROVED && p.Finder.Contains(search))
.OrderByDescending(p => p.UploadDate)
select new UploadSearch
{
User_id = uploads.User_id,
UserName = uploads.Users.Name,
UserLastName = uploads.Users.LastName,
});
我的指令添加到loop
THROU字符串,
string[] param = search.Replace(" "," ").Split(' ');
string _param = "";
int large = param.Length;
for (int i=0;i<large-1;i++)
{
_param +=param[i] ' ' + param[i + 1];
IEnumerable<UploadSearch> _viewModel = (from uploads in _db.Uploads
.Where(p => p.ProcessState_id == Security.APPROVED && p.Finder.Contains(_param))
.OrderByDescending(p => p.UploadDate)
select new UploadSearch
{
User_id = uploads.User_id,
UserName = uploads.Users.Name,
UserLastName = uploads.Users.LastName,
});
viewModel = viewModel.Union(_viewModel);
}
而且我用的是Union
条款。
但必须有另一种方式来做到这一点。
任何想法?
什么叫“动态”,其中的条件是什么意思?我不确定我了解你的问题。 – jtate