LINQ 查询中的默认值



我的MVC3应用程序中有以下Linq查询/函数。

public AuditTrail GetNamesAddressesEmployers(long registryId , int changedField) {
    var otherNameAndAddress = (from a in context.AuditTrails
                               where a.ChangedField == changedField
                                  && a.RegistryId == registryId
                               select a).FirstOrDefault();
    return otherNameAndAddress;   
} 

我希望如果 otherNameAndAddress = null,那么应该为其属性分配一些值。

其他名称和地址具有名称和说明属性。这个GetNamesAddressesEmployers在3个地方使用。我想在所有三个位置为名称和描述分配不同的值,当其他名称和地址 = null 时。

您已经在使用 FirstOrDefault() 所以为什么不指定 Default:

public AuditTrail GetNamesAddressesEmployers(long registryId, int changedField)
{
    return context.AuditTrails            
        .Where(a => a.ChangedField == changedField 
             && a.RegistryId == registryId)
        .DefaultIfEmpty(new AuditTrail { /* fill properties here */ })
        .FirstOrDefault();
}

好吧,您可以将 return 语句更改为:

return otherNameAndAddress ?? new AuditTrail { Name = "Default",
                                               Description = "Default };

或类似的东西...但是您说要为不同的调用分配不同的默认值。这意味着您要么需要传入默认值,要么在调用站点执行默认值(例如,以相同的方式,通过 null 合并运算符)。

例如:

public AuditTrail GetNamesAddressesEmployers(long registryId, int changedField,
                                             AuditField defaultValue) {
    var otherNameAndAddress = (from a in context.AuditTrails
                               where a.ChangedField == changedField
                                  && a.RegistryId == registryId
                               select a).FirstOrDefault();
    return otherNameAndAddress && defaultValue; 
}

或者保持当前状态,并在调用站点使用它:

var auditTrail = GetNamesAddressesEmployers(registryId, changedField) ??
                 new AuditTrail { Name = "Foo", Description = "Bar" };
根据您的

描述,目前尚不清楚哪个最好。

编辑:正如贾斯汀所提到的,你可以使用DefaultIfEmpty代替(就在FirstOrDefault之前)。这意味着您必须传入值,而不是在调用站点执行此操作,但除此之外,它们是非常相似的解决方案。

相关内容

  • 没有找到相关文章

最新更新