创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段

本文介绍了如何在ASP.NET Core MVC应用程序中添加查询功能,通过Name查询用户信息,详细解释了如何处理查询字符串和路由数据。同时,文章展示了如何添加新的身高字段到模型类,并通过Entity Framework Code First Migrations同步到数据库。此外,还指导了如何基于新添加的“部门”字段进行查询,包括创建视图模型、更新视图和处理部门选择。
摘要由CSDN通过智能技术生成

创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段

添加查询功能

本文将实现通过Name查询用户信息。

首先更新GetAll方法以启用查询:

public async Task<IEnumerable<User>> GetAll(string searchString)
{
    var users = from u in _context.Users
                select u;

    if (!string.IsNullOrEmpty(searchString))
    {
        users = users.Where(u => u.Name.Contains(searchString));
    }

    return await users.ToListAsync();
}

第一行的LINQ查询仅仅在这里作了定义,并没有在这里实际操作数据库。

LINQ查询在被定义或者通过调用类似于WhereContainsOrderBy的方法进行修改的时候不会执行。相反的,查询会延迟执行,比如在ToListAsync方法被调用之后。

Contains方法会在数据库中运行,而不是上面的C#代码,在数据库中,Contains会被映射成不区分大小写的SQLLIKE

由于u => u.Name.Contains(searchString)Lambda表达式在当前我所使用的MySQL Connector/NET版本中运行报错(新版本好像已经修复了该问题,这里懒得更新了),所以这里先改成:

users = users.Where(u => u.Name == searchString);

导航到http://localhost:5000/User,添加?searchString=Zhu查询字符串,将过滤出指定的用户信息(http://localhost:5000/User?searchString=Zhu)。

如果你修改Index方法的签名使得方法包含一个名为id的参数,那么id参数将会匹配Startup.cs文件中设置的默认路由的可选项{id?}

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Rename后的方法:

public async Task<IActionResult> Index(string id)
{
    var users = from u in _context.Users
                select u;
    if (!String.IsNullOrEmpty(id))
    {
        users = users.Where(u => u.Name == id);
    }

    return View(await users.ToListAsync());
}

现在你可以传递这个Name查询条件作为路由数据(URL Segment)来代替查询字符串(http://localhost:5000/User/Index/Zhu)。

然而,我们不能指望用户每次都通过修改URL来进行查询,我们通过添加UI来进行查询。如果你想改变Index方法的签名来测试怎样传递路由绑定ID参数,将searchString参数改回来。

接着,打开Views/User/Index.cshtml文件,添加<form>标记:

<form asp-controller="User" asp-action="Index">
    <p>
        姓名: <input type="text" name="SearchString">
        <input type="submit" value="过滤" />
    </
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值