繁体   English   中英

如何在Select()Lambda表达式内返回值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM