Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LINQ select中声明变量(x=>;新建_C#_Linq - Fatal编程技术网

C# 在LINQ select中声明变量(x=>;新建

C# 在LINQ select中声明变量(x=>;新建,c#,linq,C#,Linq,我正在将POCO映射到模型中,代码如下所示 // NOT NEEDED var noneRequiredUserDocuments = new List<NoneRequiredUserDocument>(); //var docs = studentDocuments.Where(x => x.RequiredUserDocumentId == null); // NOT NEEDED .ToList(); //var noneRequiredUserDocuments =

我正在将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();
Src
在上下文中不存在

我是否可以在select中声明一个变量,以便在LINQ select中重用该变量?


我不想两次调用
\u storageService.GetFileUrl

您可以引入匿名类型的临时集合,以及所有必要的数据:

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();

您可以在
选择中声明变量,如下所示:-

noneRequiredUserDocuments = docs.Select(x => 
  {
      var src= _storageService.GetFileUrl(x.FileName);
      return new NoneRequiredUserDocument
     {
        StudentDocument = x,
        Src = src,
        ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(src, 75);
     };
  }).ToList();
在查询语法中,执行此操作相当于:-

from x in docs
let src= _storageService.GetFileUrl(x.FileName)
select and so on..

您可以创建一个常规代码块,而不是在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();
您可以使用“let”关键字:


如果他可以在lambda中使用局部变量,为什么他需要使用匿名类型?@AlexSikilinda,因为这是一种可能性,因为你可以同时使用匿名和强类型方法——我认为后者应该是首选方法。然后在
Src=
部分也使用它,只是为了美观。
noneRequiredUserDocuments = docs.Select(x => {
      var  src = _storageService.GetFileUrl(x.FileName);
      return 
             new NoneRequiredUserDocument
             {
                 StudentDocument = x,
                 Src = src,
                 ThumbnailImageUrl = ImageHelper.ThumbnailImageUrl(Src, 75)
              };
    }).ToList();
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();