嗨,我有这张桌子。 我想在控制器中编写此查询。
select sum(Amount) from tbl_Amounts where fk_Roleid=2
在sql中显示800的结果。 我不知道如何用EF和Linq编写它。如果有人能告诉我两种书写方式的确很有帮助。
答案 0 :(得分:2)
这个应该基本上是您请求的Linq语法。
Linq是.NET / C#的某些“内部框架”,您使用的是实体框架。
在我看来,将两者分开没有真正的意义。
这是我用EF创建的“ DataContext”上使用的“ Linq to SQL”语法:
DataContext
.tbl_Amounts
.Where(a => a.fk_Roleid = 2)
.Sum(a => a.Amount);
如果您有一个名为Amounts的记录集合,那么它将是“ linq to objects”版本:
Amounts
.Where(a => a.fk_Roleid = 2)
.Sum(a => a.Amount);
如您所见,没有真正的区别! (除了在幕后,EF数据上下文中的第一个将转换为SQL db请求)
但这实际上可能取决于您的Entity Framework版本(并非所有linq功能都已正确转换为SQL)
答案 1 :(得分:1)
根据所使用的版本,有3种不同的方法可以在Entity Framework(EF)中执行SQL查询:
1)使用LINQ到实体(所有版本)
using (var db = new DataContext())
{
int amount = (from am in db.tbl_Amounts where am.fk_Roleid == 2 select am.amount).Sum();
}
2)使用Database.SqlQuery<T>()
(最高EF 6)
using (var db = new DataContext())
{
string query = "select sum(Amount) from tbl_Amounts where fk_Roleid=2";
int amount = db.Database.SqlQuery<int>(query).Single(); // or First()
}
3)使用FromSql()
(EF核心)
using (var db = new DataContext())
{
string query = "select sum(Amount) from tbl_Amounts where fk_Roleid=2";
int amount = db.tbl_Amounts.FromSql(query).Single(); // or First()
}
请注意,如果您使用的是EF Core,则Database.SqlQuery<T>
不存在,应该使用Execute raw SQL query in EF Core。