C# 在LINQ select中声明变量(x=>;新建
我正在将POCO映射到模型中,代码如下所示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 =
// 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();