Создание собственного выражения OrderBy в EF - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть общий класс EntityFramework, который работает с контекстом базы данных.Этот класс используется для получения данных из любой таблицы.

public async Task<List<TResult>> GetAsync<T, TResult>(
            Expression<Func<T, TResult>> selector,
            Expression<Func<T, bool>> predicate = null,
            IEnumerable<string> paths = null
            )
            where T : class, IEntityWithName<int>
        {
            var query = Entities<T>();

            if (predicate != null)
                query = query.Where(predicate);

            if (paths != null)
                foreach (var path in paths)
                    query = query.Include(path);

            var resultQuery = query
                .OrderBy(iten => item.Path.Path) // <- I need this part to work. 
                .ThenBy(item => item.FileName)  // Sort by Path first, then by FileName
                .Select(selector);

                var items = await resultQuery.ToListAsync();

                return items;
            }
        }

File table
   ID filename PathID
   1  dog1.jpg  1 
   2  dog2.jpg  2

Path table
   ID Path             
   1  \\folderPath1\           
   2  \\folderPath2\          

У меня вопрос, как я могу предоставить параметр OrderBy, чтобы результаты сначала упорядочивались по пути, который, конечно, хранится в таблице пути.

Проблема, с которой я сталкиваюсь, заключается в том, что сущность "Путь" не всегда включена в результат.Вот почему мне нужно сначала проверить, а затем создать собственное выражение для предложения OrderBy.

Ответы [ 2 ]

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

Вы можете поставить галочку в своем предложении OrderBy (), чтобы проверить, является ли item.Path.Path isNullOrEmpty:

var resultQuery = query
            .OrderBy(item => !string.IsNullOrEmpty(item.Path.Path))
            .ThenBy(item => item.FileName)
            .Select(selector);
0 голосов
/ 20 ноября 2018

Вы можете использовать динамическую библиотеку запросов LINQ, которая допускает строковые параметры в порядке, где предложения и другие операции.

.OrderBy ("columnname")

...