小编ebu*_*bug的帖子

Linq:IEnumerable上的扩展方法,用于在执行选择时自动执行空值检查

当执行一个Selecton IEnumerable我相信检查空引用是一个好习惯,所以我经常Where在我之前有Select这样的:

someEnumerable.Where(x => x != null).Select(x => x.SomeProperty);
Run Code Online (Sandbox Code Playgroud)

访问子属性时,这会变得更加复杂:

someEnumerable.Where(x => x != null && x.SomeProperty != null).Select(x => x.SomeProperty.SomeOtherProperty);
Run Code Online (Sandbox Code Playgroud)

要遵循这种模式,我需要进行一次调用Where.我想创建一个扩展方法IEnumerable,根据引用的内容自动执行这样的空检查Select.像这样:

someEnumerable.SelectWithNullCheck(x => x.SomeProperty);
someEnumerable.SelectWithNullCheck(x => x.SomeProperty.SomeOtherProperty);
Run Code Online (Sandbox Code Playgroud)

可以这样做吗?是fx.selector在创建扩展方法时可以从参数中检索选定的属性吗?

public static IEnumerable<TResult> SelectWithNullCheck<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)
{
    return source.Where(THIS IS WHERE THE AUTOMATIC NULL-CHECKS HAPPEN).Select(selector);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我在.NET Framework 4.5中使用C#5.0

c# linq c#-5.0

5
推荐指数
1
解决办法
539
查看次数

抽象Django类中的多个外键字段

我有一个抽象基类,该基类向用户模型声明了两个外键字段:

class BaseModel(models.Model):
    updated = models.DateTimeField(null=True)
    updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, related_name="updated_by")
    created = models.DateTimeField(null=True)
    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, related_name="created_by")

    class Meta:
        abstract=True
Run Code Online (Sandbox Code Playgroud)

我有多个从此类继承的类。当我跑makemigrations,我收到以下错误为每个可能的类对和两个created_byupdated_by

myapp.ClassA.updated_by :(字段E305)“ ClassB.updated_by”的反向查询名称与“ ClassB.updated_by”的反向查询名称发生冲突。

提示:在“ ClassA.updated_by”或“ ClassB.updated_by”的定义中添加或更改related_name参数。

即使我已经设置了related_name。它仅适用于声明的两个外键字段之一。

在一个抽象类中是否可能有两个相同的模型的外键字段,如果是的话,如何设置它?

python django django-models

2
推荐指数
1
解决办法
418
查看次数

标签 统计

c# ×1

c#-5.0 ×1

django ×1

django-models ×1

linq ×1

python ×1