具有Linq.Dynamic的C#实体框架:按COALESCE排序

时间:2018-12-13 10:15:25

标签: c# entity-framework linq

我有两个表dbo.Foodbo.Bar

dbo.Foo具有两个重要属性:

  • ID(主键)
  • OwnerID(同一表的外键(ID))

dbo.Bar具有三个重要属性:

  • ID(主键)
  • FooIDdbo.Foo(ID)的外键)
  • FooOwnerID(也是dbo.Foo(ID)的外键)

dbo.Bar中,必须设置FooIDFooOwnerID。下面,我创建了一个图形来显示结构:

Data modell

我的dbo.Bar的模型类如下:

public class Bar
{
    public int ID { get; set; }
    public int FooID { get; set; }
    public int FooOwnerID { get; set; }

    public virtual Foo Foo { get; set; }
    public virtual Foo FooOwner { get; set; }
}

表的映射(使用fluent-api)如下:

modelBuilder.Entity<Bar>().ToTable("Bar", "dbo");
modelBuilder.Entity<Bar>().HasKey(x => x.ID);
modelBuilder.Entity<Bar>().Property(x => x.FooID).IsRequired();
modelBuilder.Entity<Bar>().Property(x => x.FooOwnerID).IsRequired();
modelBuilder.Entity<Bar>().HasOptional(x => x.Foo).WithMany().HasForeignKey(x => x.FooID);
modelBuilder.Entity<Bar>().HasOptional(x => x.FooOwner).WithMany().HasForeignKey(x => x.FooOwnerID);

这有效。但是,如果只设置FooOwner,我想让Foo成为null的实际所有者,而不是FooID。有人知道如何执行此操作吗?

背景

我正在使用DataTables在视图上显示数据。要订购商品,DataTables将按顺序发送列名(例如Foo.ID)。我正在使用Linq.Dynamic动态排序结果集。订单字符串如下所示:Foo.ID asc, PropertyOfBar desc

1 个答案:

答案 0 :(得分:0)

  

有人知道怎么做吗?

没有内置。但是您始终可以使用方法或NotMapped属性

例如

public Foo GetFooOwner() => FooOwner??Foo.Owner;