LINQ для подсчета количества строк в таблице ссылок - PullRequest
3 голосов
/ 18 августа 2011

У меня есть следующая модель

public class Account
{
    public int Id { get; set; }
    public List<Note> Notes { get; set; }
}

Я пытаюсь запросить мой репозиторий nhibernate, чтобы подсчитать количество заметок для конкретной учетной записи.

return this.Data.Where(x => x.Id == accountId).Select(x => x.Notes).Count();

Однако независимо от того, сколько существует заметок, оно всегда возвращает 1.

Я пытаюсь сделать это наиболее эффективным способом без необходимости получать объект учетной записи, а затем подсчитывать количество заметок.

Может ли кто-нибудь предложить эквивалент Linq следующего SQL.

SELECT Count(*) FROM NoteToAccount WHERE AccountId=?

Где NoteToAccount - это таблица ссылок, которая находится между таблицами Account и Note.

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Вы получаете обратно IEnumerable<List<Note>>, в котором есть один элемент - список заметок для учетной записи.

Вы можете использовать SelectMany вместо Select, чтобы объединить его в одну большую сущность, или вы можете использовать:

this.Data.First(x => x.Id == accountId).Notes.Count;

Я, конечно, предполагаю, что accountId является первичным ключом, поэтому вы получите только один элемент обратно. Вы также можете использовать Single вместо First, чтобы гарантировать, что вы получите ровно один предмет назад.

2 голосов
/ 18 августа 2011

Вы хотите использовать

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