使用实体框架从MSSQL返回一组非常特定的数据

时间:2018-11-07 14:54:20

标签: entity-framework asp.net-core asp.net-core-mvc

通过遵循Microsoft教程,我能够使用Enitity Framework创建.NetCore 2.1网站。

该Web应用程序连接到MS SQL数据库,并使用脚手架将数据库表转换为类。

但是它在后台所做的只是基本的查询,例如'select * from myTable'等。

例如,我有一个简单的控制器,它仅获取PlayerList表中的所有Player:

        // GET: PlayerLists
    public async Task<IActionResult> Index()
    {
        return View(await _context.PlayerList.ToListAsync());
    }

这有点复杂,但实际上只是获得了一名玩家:

        // GET: PlayerLists/Edit/5
    public async Task<IActionResult> Edit(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        var playerList = await _context.PlayerList.FindAsync(id);
        if (playerList == null)
        {
            return NotFound();
        }
        return View(playerList);
    }

这可行,但是我需要更复杂的东西才能从数据库中获取一组非常特定的数据。

如何添加带有SQL Join,case语句和group by子句的非常具体的查询的查询?

谢谢!

1 个答案:

答案 0 :(得分:2)

在EF core 2.1中,我们使用Linq查询数据。您可以了解如何使用Joins heregroup by here。当是条件运算符?:

时,事务sql CASE的linq等效项

下面是一个简单的演示,结合了它们以进行查询:

1。模型

public class Product
{
    [Key]
    public int ProductID { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }

    public int CategoryID { get; set; } 
    public Category Category { get; set; }
}
public class Category
{
    [Key]
    public int CategoryID { get; set; }
    public string Name { get; set; }


    public IList<Product> Products { get; set; }
}

2。在控制器中查询

var result = from p in _context.Products
                     group p by p.CategoryID into pg
                     // join *after* group
                     join c in _context.Categories on pg.FirstOrDefault().CategoryID equals c.CategoryID
                     select new
                     {
                         CategoryName = c.Name == "oldName" ? "newName" : c.Name,//Replace Case statement
                         Products = pg
                     };