簡體   English   中英

將父表/實體與子表/實體連接的好方法?

[英]Good way to connect parent table/entity with child table/entities?

當前,我正在使用Entity Framework,並且有兩個數據庫表,一個“父”表和一個“子”表用於存儲與語言相關的字符串:

在此處輸入圖片說明

我想“智能”獲取遵循此“算法”的所有元素及其子元素的列表:

  1. 獲取語​​言A的子元素。
  2. 如果不可用,請獲取語言B的子元素。

(備用語言B始終存在)。

結果看起來像這樣:

在此處輸入圖片說明

即,對於項目4,沒有使用語言“ DE”(德語)的條目,因此發生了對語言“ EN”(英語)的回退。

當僅依賴一種語言時,我可以使用以下代碼:

using (var ctx = new MyEntities())
{
    var items =
        ctx.Items.Select(
        i =>
            new ItemModel
            {
                Id = i.Id,
                Name = i.ChildItems.FirstOrDefault(x => x.Language == "DE").Name
            });
}

由於我也必須使用后備語言,因此我唯一想到的就是使用foreach循環。

理想情況下,我想避免這種情況,並使用一個單獨的LINQ語句,類似於上面的語句。

所以我的問題是:

我可以在一個LINQ語句中表達我的“算法”嗎?

我認為您應該執行以下操作,假設您具有按優先級排序的語言列表:

var languages = new List<string> {"DE", "EN", "FR"};//Can add more
using (var ctx = new MyEntities())
{
  var items =
    ctx.Items.Select(
        i => new ItemModel
        {
            Id = i.Id,
            Name = languages.Select(lang=> i.ChildItems
                                            .FirstOrDefault(x=>x.Language == lang))
                            .FirstOrDefault(x=>x!=null).Name;//Suppose the default value of ChildItem is null (a reference type).
        });
}

或這個:

using (var ctx = new MyEntities())
{
  var items =
    ctx.Items.Select(
        i => new ItemModel
        {
            Id = i.Id,
            Name = i.ChildItems.FirstOrDefault(x=>languages.Any(k=>k == x.Language)).Name                 
        });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM