Как я могу выполнить этот запрос LINQ при условии, что что-то не существует в таблице? - PullRequest
0 голосов
/ 23 июня 2009

В нашей базе данных файл «Обрабатывается», если для столбца «Ожидание» в FileTable установлено значение false, а файлов FileID в таблице транзакций не существует.

Как мне создать запрос LINQ, который в основном говорит:

где f.Pending == False && (f.ID! = Существует в db.Transactions.FileID)

Часть в скобках - это то, что я не знаю, как это сделать. Я мог бы сделать это в отдельном запросе, но я знаю, что есть способ элегантно сделать это в одном запросе.

Вот что у меня есть:

 public IEnumerable<PlacementFile> getProcessingPlacementFiles()
        {
            using (LinqModelDataContext db = new LinqModelDataContext())
            {
                var placementFiles = from f in db.Placement_Files
                                     where (f.Pending == false && (f.ID does not exist in db.Transactions.FileID))
                                     orderby f.Import_Date descending
                                     select f;

                return placementFiles;

            }

Это тот случай, когда мне нужно сделать соединение для FileTable и таблицы транзакций? Может ли кто-нибудь немного помочь мне в этом?

Ответы [ 2 ]

1 голос
/ 23 июня 2009

Использование:

where !f.Pending && !db.Transactions.Any(trans => trans.ID == f.ID)

Это должно работать, по крайней мере, логически - вы должны будете увидеть, генерировал ли он правильный SQL, конечно:)

0 голосов
/ 23 июня 2009

Это тот случай, когда вы хотите использовать метод расширения Any (), например:

public IEnumerable<PlacementFile> getProcessingPlacementFiles()
{
    using (LinqModelDataContext db = new LinqModelDataContext())
    {
         return  from f in db.Placement_Files
                 where (!f.Pending && !db.Transactions
                                         .Any( t => t.FileID == f.ID)
                 orderby f.Import_Date descending                        
                 select f;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...