Добавить внутреннее или внешнее объединение на основе параметра - PullRequest
0 голосов
/ 18 января 2019

Вероятно, это простой / глупый вопрос, но есть ли способ добавить внутреннее или внешнее объединение к SQL-запросу (со структурой сущностей) на основе полученных данных?

* ** 1003 тысяча два * Пример
public bool method(int? typeId, int? categoryId){
    var query = from o in _dbContext.SomeObjects;

    //JOIN type
    if(typeId != null){
        //Add inner join with table types to query
        //Something like:  
        //query += join type in _dbContext.Types on o.TypeId equals type.ID
    }else{
        //Add outer join with table types to query
        //query += join type in _dbContext.Types on o.TypeId equals type.ID into types
        //             from type in types.DefaultIfEmpty()
    } 

    //Do same for category
    ...

    //Filters
    if(typeId != null){
        query += where type.ID == typeId
    }

    if(categoryId != null){
        query += where category.ID == categoryId
    }

}

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Исправлено, сделав следующее:

var query = from o in _dbContext.SomeObjects
                join type in _dbContext.Types on o.TypeId equals type.ID
            where (typeId == null || type.ID == typeId) &&
0 голосов
/ 18 января 2019

Я думаю, что ваша главная проблема здесь просто печатать. Используя var для хранения начального запроса, введите его как DbSet<SomeObject>. Для построения запросов вам нужно IQueryable<SomeObject>. Другими словами, измените исходную строку на:

IQueryable<SomeObject> query = from o in _dbContext.SomeObjects;

Я сам не использую LINQ-to-SQL, так что это может быть немного не так, но я думаю, что тогда вы просто сделаете что-то вроде:

query = query join type in _dbContext.Types on o.TypeId equals type.ID;

Я знаю, что это работает с LINQ-to-Entities, например:

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