2011-07-02 91 views
1

我想排序關鍵字的排序屬性。 我在頁面 - >關鍵字之間有一對多的關係。Linq對實體使用一對多關係和排序

問題:如果我執行一個查詢理解爲:

IEnumerable<page> query = from p in contxt.pages where p.ID == myId select p; 

IEnumerable<page> pge = query.First(); 

我能想到一個單頁記錄了所有的頁面的屬性和一個關鍵字收集組?

我的理解是因爲存在一對多關係,我不必執行連接。 Linq to Entity框架應該知道這種關係,並返回一個集合。

所以這是我的理解,所以當我嘗試排序keyword.sort,關鍵字超出範圍:

IEnumerable<page> query = from p in contxt.pages where p.ID == myId 
orderby p.keywords. select p; 

利用上述理解我想查詢是不正確的關鍵字,因爲返回爲一個集合,所以我必須執行如下排序:

PageKeywords pageKeywords = new PageKeywords(); 
    Keywords keywords; 

    IEnumerable<page> query = from p in contxt.pages 
where p.ID == vals.pageId select p; 

    page pge = query.First(); 

    pageKeywords.keywords = new List<Keywords>(); 

    pageKeywords.id = pge.ID; 
    pageKeywords.description = pge.descp; 
    pageKeywords.title = pge.title; 
    pageKeywords.showTitle = pge.showTitle; 
    pageKeywords.keywords = pge.keywords.OrderBy(k => k.sort); 

    foreach (var item in pageKeywords.keywords) 
    { 
    keywords = new Keywords(); 
    keywords.id = item.id; 
    keywords.name = item.name; 
    keywords.sort = item.sort; 
    pageKeywords.keywords.Add(keywords); 
    } 

但是,這並沒有奏效。關鍵字沒有按排序排序?上面的代碼確實有效,但是我需要按排序屬性對關鍵字進行排序。關鍵字集合未被排序。

我也試過:

pageKeywords.keywords.Sort((x, y) => int.Compare(x.sort, y.sort)); 

,沒有工作。

我試着去了解,但我錯過了什麼?任何建議都是可觀的。

enter image description here

回答

2

嘗試這種情況:

var query = from p in contxt.Pages 
      where p.ID == vals.PageId 
      select new PageKeywords 
       { 
        Id = pge.Id, 
        Description = pge.Descp, 
        Title = pge.Title, 
        ShowTitle = pge.ShowTitle, 
        Keywords = pge.Keywords.OrderBy(k => k.sort) 
       }; 
+0

哇!很好的在查詢中創建對象。在我的學習中幫助了很多。想知道,而不是使用var,將返回什麼樣的數據類型。我的猜測是,數據類型是一個新的PageKeywords對象,還是IEnumerable ?甜蜜的代碼,節省了很多線條。 – deDogs

+0

數據類型是'IQueryable '。 –

0

OrberBy返回一個新的枚舉 - 它不更改源:http://msdn.microsoft.com/en-us/library/bb534966.aspx

此外,要通過關鍵字的屬性進行排序,頁面可能有很多的關鍵詞,你需要選擇一個(例如最少一個)。

嘗試:

IEnumerable<page> query = context.pages // Pages 
    .Where(p => p.ID == myId) // Filtered by id 
    // Sort by minimum sort value of all keywords of page 
    .OrderBy(p.Keywords.Select(keyword => keyword.sort).Min()); 

此外,使用.NET對名字指南建議(例如性能應PascalCase而不是駝峯)。

+0

想知道.OrderBy(p.Keywords.Select(關鍵字=> keyword.sort).Min());是不是不在範圍內?我上面的代碼不正確。我知道OrderBy返回一個新的枚舉,那麼這應該工作:pageKeywords.keywords = pge.keywords.OrderBy(k => k.sort);我更正了上面的代碼。 – deDogs

+0

我想返回匹配頁面ID的關鍵字集合。我沒有一個關鍵字。我想要一個集合? – deDogs

相關問題