Объявите переменную в LINQ select (x => new
Я сопоставляю POCO с моделью, код показан ниже.
// NOT NEEDED var noneRequiredUserDocuments = new List<NoneRequiredUserDocument>();
//var docs = studentDocuments.Where(x => x.RequiredUserDocumentId == null); // NOT NEEDED .ToList();
//var noneRequiredUserDocuments = docs.Select(x => new NoneRequiredUserDocument
// You can chain LINQ methods (i.e. Where and Select)
var noneRequiredUserDocuments = studentDocuments
.Where(x => x.RequiredUserDocumentId == null)
.Select(x => new NoneRequiredUserDocument
{
StudentDocument = x,
Src = _storageService.GetFileUrl(x.FileName),
ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(Src, 75)
}).ToList();
Моя проблема в том, что в этой строке:
ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(Src, 75)
Src
не существует в контексте.
Есть ли способ для меня объявить переменную внутри выбора, который я могу повторно использовать в выборе LINQ?
Я не хочу дважды вызывать _storageService.GetFileUrl
.
Спасибо
Ответы
Ответ 1
Вы можете объявить переменную внутри Select
следующим образом: -
noneRequiredUserDocuments = docs.Select(x =>
{
var src= _storageService.GetFileUrl(x.FileName);
return new NoneRequiredUserDocument
{
StudentDocument = x,
Src = src,
ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(src, 75);
};
}).ToList();
В query syntax
выполнение этого эквивалентно: -
from x in docs
let src= _storageService.GetFileUrl(x.FileName)
select and so on..
Ответ 2
Вы можете использовать ключевое слово "let":
var list = (from x in docs
let temp = _storageService.GetFileUrl(x.FileName)
select new NoneRequiredUserDocument
{
StudentDocument = x,
Src = temp,
ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(temp, 75)
}).ToList();
Ответ 3
вы можете создать обычный блок кода вместо запуска одного оператора в выражении лямбда, таким образом вы можете просто объявить переменную "src", и она будет доступна по всему блоку - после регулярных правил области.
noneRequiredUserDocuments = docs.Select(x => {
var src = _storageService.GetFileUrl(x.FileName);
return
new NoneRequiredUserDocument
{
StudentDocument = x,
Src = src,
ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(Src, 75)
};
}).ToList();
Ответ 4
Вы можете ввести временную коллекцию анонимного типа со всеми необходимыми данными:
noneRequiredUserDocuments = docs
.Select(x => new { Data = x, Src = _storageService.GetFileUrl(x.FileName) }
.Select(x => new NoneRequiredUserDocument
{
StudentDocument = x.Data,
Src = x.Src
ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(x.Src, 75)
}).ToList();