![](/img/trans.png)
[英]How can I capture the value of an outer variable inside a lambda expression?
[英]How can I return a value inside Select() Lambda Expression
参见下面的示例,现在我需要检查UserService.GetByUserID()
是否为null,然后返回String.Empty
。 我怎么仍能在一排中做到这一点?
var benefits = customerBenefits.Select(n =>
new CustomerBenefit(n.BenefitID,
n.AddedByUserID.HasValue
? UserService.GetByUserID(n.AddedByUserID.Value).DisplayName
: n.AddedByAgentID, n.Reason);
Call service first then assign result.
var benefits = customerBenefits
.Select(n => {
var user = serService.GetByUserID(n.AddedByUserID.Value);
return new CustomerBenefit(
n.BenefitID,
n.AddedByUserID.HasValue ? (user== null ? String.Empty : ).DisplayName) : n.AddedByAgentID,
n.Reason} );
通过使用let in查询语法,可以存储子结果:
var benefits = from n in customerBenefits
let hasuserid = n.AddedByUserID.HasValue
let user = hasuserid ? UserService.GetByUserID(n.AddedByUserID.Value) : null //the call to GetUserID is stored here
select
new CustomerBenefit(
n.BenefitID,
hasuserid
? (user == null ? string.Empty : user.DisplayName) //the stored sub result is reused
: n.AddedByAgentID,
n.Reason);
您可以尝试类似的方法:
var benefits = customerBenefits.Select(n =>
new CustomerBenefit(
n.BenefitID,
n.AddedByUserID.HasValue
? (UserService.GetByUserID(n.AddedByUserID.Value) == null
? String.Empty
: UserService.GetByUserID(n.AddedByUserID.Value).
DisplayName)
: n.AddedByAgentID,
n.Reason);
这是您需要的吗?
var benefits = from n in customerBenefits
let id = n.AddedByUserID.HasValue
let user = id ? UserService.GetByUserID(n.AddedByUserID.Value) : null select
new CustomerBenefit(
n.BenefitID,
id ? (user == null ? string.Empty : user.DisplayName)
: n.AddedByAgentID,
n.Reason);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.