通过遵循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子句的非常具体的查询的查询?
谢谢!
答案 0 :(得分:2)
在EF core 2.1中,我们使用Linq查询数据。您可以了解如何使用Joins
here和group by
here。当是条件运算符?:
下面是一个简单的演示,结合了它们以进行查询:
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
};