Рефракционирование вложенного запроса в Linq to Entity Framework

63
9

Предположим, у меня есть этот запрос:


var ps = from p in dc.Products
let text =
(from t in p.Text
orderby t.Language == "ja" descending
select t).FirstOrDefault()
select new { p.Id, text.Name };

Есть ли способ прервать запрос, назначенный text?


Я предполагаю, что мне нужно сделать это Expression<Func<Product, string, ProductText>>, но я не знаю, как я его вызываю.


Кстати, если есть более эффективные способы сделать это, я был бы рад узнать.


Спасибо,


Рэй


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


Может быть, это более эффективно?


let text = p.Text.FirstOrDefault(t => t.Language == "ja") ?? p.Text.FirstOrDefault()

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

спросил(а) 2021-01-25T16:12:15+03:00 4 месяца, 2 недели назад
1
Решение
63

ИЗМЕНИТЬСЯ НА КОММЕНТАРИИ

var ps = dc.Products.Select(p => new 
{
Id = p.Id,
Text = p.Text.OrderBy(t=> t.Language == "ja").First()
})
.Select (x => new
{
Id = x.Id,
Name = x.Name,
...
});

ответил(а) 2021-01-25T16:12:15+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема