1
無法想出一個好標題,因爲我不知道的名字我後:)實體框架的核心 - 許多一對多「影子查詢」
我的域名
public class Profile
{
public int Id { get; set }
// Many-to-many using CLR join class
public virtual IList<Youtubes> Youtubes { get; set; }
}
public class Youtubes
{
public int YoutubeId { get; set; }
public int ProfileId { get; set; }
public bool IsPrimary { get; set; }
// Virtual properties omitted
}
只有一個通道可以被標記爲IsPrimary
(這是不可能在數據庫級別使用當前設計強制執行:)。
我有一個需求,我需要對Youtube
上定義的屬性進行排序,即Cost
是可以爲空的int,我正在努力完成這項工作。在這種特殊情況下,我只關心那些主要的(至少在寫這篇文章時這種要求是這樣的)。
排序表達式定義爲
public Expression<Func<Profile, int>> Exp()
{
return p => (p.Blog.Cost ?? 0) + (p.Instagram.Cost ?? 0) +
(p.Youtube.Cost ?? 0); // This was prior to adding many-to-many
}
我想要做的就是
public Expression<Func<Profile, int>> Exp()
{
return p => (p.Blog.Cost ?? 0) + (p.Instagram.Cost ?? 0) +
(p.Youtubes.FirstOrDefault(y => i.IsPrimary)?.Cost ?? 0);
}
但是,這是不允許的表達式樹內。那麼如何解決這個問題呢?
目前傾向於創建一個ProfileYouTubePrimary
,它將建立Profile - > Youtubes - > Primary之間的零對一關係,因此我可以強制在數據庫級別最多有一個主要通道,並且在相同我的表達式樹中的屬性的引用。
輸入greately讚賞
我怎麼能錯過 - 謝謝! – joacar