Как написать запрос структуры сущностей и запрос Linq на C #? - PullRequest
0 голосов
/ 06 ноября 2018

enter image description here

Привет, у меня есть этот стол. Я хочу написать этот запрос в моем контроллере.

select sum(Amount) from tbl_Amounts where fk_Roleid=2

, который показывает результат 800 в sql. Я не знаю, как написать это в EF и Linq. Если бы кто-то мог любезно показать мне, как писать обоими способами, было бы очень полезно.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Существует 3 различных способа выполнения SQL-запроса в Entity Framework (EF), в зависимости от используемой версии:

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 Core)

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> не существует, и вам следует использовать Выполнить необработанный SQL-запрос в EF Core .

0 голосов
/ 06 ноября 2018

Это должно в основном быть синтаксисом Linq для вашего запроса.

Linq - это некая "внутренняя структура" .NET / C #, и вы используете Entity Framework.

На мой взгляд, нет никакого реального смысла в их разделении.

Это синтаксис «Linq to SQL», который я бы использовал в «DataContext», который вы создаете с помощью EF:

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 будет преобразован в запрос db SQL)

Но на самом деле это может зависеть от вашей версии Entity Framework (не все функции linq правильно переведены в SQL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...