在LINQ select中声明变量(x => new

Mic*_*ves 24 c# linq

我正在将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();
Run Code Online (Sandbox Code Playgroud)

我的问题是在这一行:

ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(Src, 75)
Run Code Online (Sandbox Code Playgroud)

Src 在上下文中不存在.

有没有办法让我在select中声明一个我可以在LINQ select中重用的变量?

而且我不想打_storageService.GetFileUrl两次电话.

Rah*_*ngh 43

你可以在这里声明一个变量Select: -

noneRequiredUserDocuments = docs.Select(x => 
  {
      var src= _storageService.GetFileUrl(x.FileName);
      return new NoneRequiredUserDocument
     {
        StudentDocument = x,
        Src = src,
        ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(src, 75);
     };
  }).ToList();
Run Code Online (Sandbox Code Playgroud)

query syntax做这相当于: -

from x in docs
let src= _storageService.GetFileUrl(x.FileName)
select and so on..
Run Code Online (Sandbox Code Playgroud)

  • 然后在`Src =`部分使用它,只是为了美学. (2认同)

Tse*_*sef 10

您可以使用"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();
Run Code Online (Sandbox Code Playgroud)


Vev*_*rke 7

您可以创建一个常规代码块,而不是在lambda表达式中运行单个语句,这样您就可以声明一个变量"src",它将在整个块中可用 - 遵循常规范围规则.

noneRequiredUserDocuments = docs.Select(x => {
      var  src = _storageService.GetFileUrl(x.FileName);
      return 
             new NoneRequiredUserDocument
             {
                 StudentDocument = x,
                 Src = src,
                 ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(Src, 75)
              };
    }).ToList();
Run Code Online (Sandbox Code Playgroud)