如何在C#上编写实体框架查询和Linq查询?

时间:2018-11-06 07:50:39

标签: c# sql asp.net-mvc entity-framework linq

enter image description here

嗨,我有这张桌子。 我想在控制器中编写此查询。

select sum(Amount) from tbl_Amounts where fk_Roleid=2

在sql中显示800的结果。 我不知道如何用EF和Linq编写它。如果有人能告诉我两种书写方式的确很有帮助。

2 个答案:

答案 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