У меня есть таблица, которая называется Signer:
+--------------+----------+---------+--------+--------------+---------+-----------+
| Name | User | Order | Signed | CompanyName | Status | InvoiceId |
+--------------+----------+---------+--------+--------------+---------+-----------+
| Anders | aa | 1 | 0 | OvnAnd2 | 0 | 26650 |
| Peyman | pm | 2 | 1 | OvnAnd2 | 1 | 26650 |
| Siw Ericsson | se | 3 | 0 | OvnAnd2 | 0 | 26650 |
| test | test | 4 | 0 | OvnAnd2 | 0 | 26650 |
|Siw Ericsson | se | 1 | 0 | OvnAnd2 | 0 | 26652 |
| test | test | 2 | 1 | OvnAnd2 | 0 | 26652 |
|Siw Ericsson | se | 1 | 0 | OvnAnd2 | 0 | 25365 |
+--------------+----------+---------+--------+--------------+---------+-----------+
Цель:
Как видите, у меня есть 3 разных InvoiceId. Для каждого InvoiceId я хотел бы найти строку с минимальным номером заказа, в котором значение столбца Status
равно 0, а столбец User
должен быть se
.
(Это означает, Показать текущие счета, связанные с пользователями, которые готовы к подписанию, основываясь на его / ее имени пользователя, заказе, подписанных столбцах)
Я придумал этот T-SQL, который отлично работает:
select * from Signer s1
where s1.User = 'se' and Order = (select min(Order) from Signer s2 where s2.InvoiceId = s1.InvoiceId and Signed = 0)
И результат:
+--------------+----------+---------+--------+--------------+---------+-----------+
| Name | User | Order | Signed | CompanyName | Status | InvoiceId |
+--------------+----------+---------+--------+--------------+---------+-----------+
|Siw Ericsson | se | 1 | 0 | OvnAnd2 | 0 | 26652 |
|Siw Ericsson | se | 1 | 0 | OvnAnd2 | 0 | 25365 |
+--------------+----------+---------+--------+--------------+---------+-----------+
Я хотел бы преобразовать этот запрос из T-Sql
в Linq
или EntityFramework
:
Это мое решение:
var temp = from x in db.Signers
where x.User == Me.UserName &&
x.Signed == 0
group x by x.InvoiceId
into item
select new
{
item.Key,
item = item.Min(x => x.Order)
};
Возвращает 3 строки, что неверно, потому что Сив должна увидеть связанные счета, которые готовы подписать. (Это означает, что первая строка не должна быть в списке)
+--------------+----------+---------+--------+--------------+---------+-----------+
| Name | User | Order | Signed | CompanyName | Status | InvoiceId |
+--------------+----------+---------+--------+--------------+---------+-----------+
| Anders | aa | 1 | 0 | OvnAnd2 | 0 | 26650 |
|Siw Ericsson | se | 1 | 0 | OvnAnd2 | 0 | 26652 |
|Siw Ericsson | se | 1 | 0 | OvnAnd2 | 0 | 25365 |
+--------------+----------+---------+--------+--------------+---------+-----------+
Дополнительная информация:
- Как видно из первой таблицы, у нас есть особая логика, согласно которой кто-то может подписывать счета не по порядку, и Peyman
является одним из них.
- Я не хочу использовать SqlQuery()
метод в Entityframework
для выполнения запросов t-sql.
Я ценю любую помощь, чтобы найти решение для моей цели.
С наилучшими пожеланиями