LINQ to Entities多条件动态查询实现

在WEB应用程序中经常会碰到多条件查询,比如查找某个用户,可能根据用户名查询,也可能根据注册时间查询,以前是通过拼接sql完成,那在LINQ to Entities要怎么实现?直接上代码:

using (testContext context = new testContext())
{
    var query = context.Users.AsQueryable();

    //动态查询
    string usn = Request.Form["usn"];
    if (usn != null)
        query = query.Where(u => u.usn == usn);
    string ww = Request.Form["ww"];
    if (ww != null)
        query = query.Where(u => u.wangwang == ww);

    Label1.Text = query.Select(u => u.id).First().ToString();
}

在SQL Server Profiler跟踪结果:

exec sp_executesql N'Select TOP (1)
[Extent1].[id] AS [id]
FROM [dbo].[User] AS [Extent1]
Where ([Extent1].[usn] = @p__linq__0) AND ([Extent1].[wangwang] = @p__linq__1)',N'@p__linq__0 nvarchar(4000),@p__linq__1 nvarchar(4000)',@p__linq__0=N'dnawo',@p__linq__1=N'abc'

这得益于Linq延迟执行功能,使得程序可以将多条件合并查询。将上边代码稍做修改,思考下将怎么执行?哪一种方式更好?

using (testContext context = new testContext())
{
    var query = context.Users.ToList();

    //动态查询
    string usn = Request.Form["usn"];
    if (usn != null)
        query = query.Where(u => u.usn == usn).ToList();
    string ww = Request.Form["ww"];
    if (ww != null)
        query = query.Where(u => u.wangwang == ww).ToList();

    Label1.Text = query.Select(u => u.id).First().ToString();
}


评论: 0 | 引用: 0 | 查看次数: 5180
发表评论
登录后再发表评论!