簡體   English   中英

如何編輯序列,使其僅使用LINQ返回一個元素

[英]How can I edit my sequence so it returns one element only using LINQ

我有以下代碼:

var subcategories = new List<Subcategory>
{
    new Subcategory { SubcategoryName = "Football", CategoryID = categories.Single(c => c.CategoryName == "Sport").CategoryID },
    new Subcategory { SubcategoryName = "Basketball", CategoryID = categories.Single(c => c.CategoryName == "Sport").CategoryID },
    new Subcategory { SubcategoryName = "Piano", CategoryID = categories.Single(c => c.CategoryName == "Music").CategoryID },
    new Subcategory { SubcategoryName = "Violin", CategoryID = categories.Single(c => c.CategoryName == "Music").CategoryID }
};

foreach (Subcategory s in subcategories)
{
    var subcategoriesInDB = context.Subcategories.Where(c => c.Category.CategoryID == s.CategoryID).SingleOrDefault();

    if (subcategoriesInDB == null)
    {
        context.Subcategories.Add(s);
    }
}

關鍵是,foreach語句中的查詢在我的情況下返回兩個元素。 因為您可以看到我的兩個類別有兩個子類別,因此總共有四個子類別。 這會導致錯誤消息:當我嘗試Update-Database命令時, Sequence contains more than one element

正如您所看到的,我的子類別名稱都不同,因此我想添加一個檢查。 因此,如果類別ID相同,那么我們將檢查子類別名稱是否與數據庫中已存在的子類別名稱不同,因此它將返回一個條目或返回null。 如果有人可以幫助我實現它,或者給我另一種解決方案,我會很高興。

更新:

如果我將其更改為:

var subcategoriesInDB = context.Subcategories.FirstOrDefault(c => c.Category.CategoryID == s.CategoryID);

然后執行Update-Database命令,我收到一條新的錯誤消息:

更新條目時發生錯誤。 有關詳細信息,請參閱內部異常

 var subcategoriesInDB = context.Subcategories.Where(c => c.Category.CategoryID == s.CategoryID).SingleOrDefault();

應該讀....

 var subcategoriesInDB = context.Subcategories.FirstOrDefault(c => c.Category.CategoryID == s.CategoryID);

在使用SingleOrDefault您暗示只返回一個元素。 如果沒有,你將得到null ,如果有多個,你會得到一個例外,讓你知道有多個(即不是你所期望的)。 使用FirstOrDefault意味着您知道可能有多個元素與您的查詢匹配,但您只需要第一個元素。

暫無
暫無

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

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