2011-07-02 9 views
1

私はそのソートプロパティでキーワードを並べ替えるのが好きです。 私はpage - >キーワードの間に1対多の関係があります。1対多のリレーションシップと並べ替えで動作するLinq-to-Entities

質問:私は理解としてクエリを実行する場合:

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

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

私はすべてのページのプロパティと一つのキーワードコレクションに設定された単一のページのレコードを期待してもらえますか?

私の理解は、1対多の関係が存在するため、私は結合を実行する必要はありません。 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); 
    } 

しかし、これは動作しませんでした。キーワードはソート順にソートされていませんか?上のコードはうまくいきますが、キーワードをsortプロパティでソートする必要があります。キーワードコレクションがソートされていません。

私も試してみました:

動作しませんでした
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

はまた、あなたは、キーワードのプロパティでソートしたい、ページは多くのキーワードを持っていることが、あなたが選択する必要があります1つ(例えば、最小のもの)。

試してみてください。名前の.NETのガイドラインを使用しても

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()); 

が、推奨される(例えば、プロパティはキャメルケースをPascalCaseしていないする必要があります)。

+0

疑問に思う.OrderBy(p.Keywords.Select(キーワード=> keyword.sort).Min());範囲にないpではない?上の私のコードは間違っています。私はOrderByが新しい列挙型を返すことを知っていました。これはうまくいくはずです:pageKeywords.keywords = pge.keywords.OrderBy(k => k.sort);上記のコードを修正しました。 – deDogs

+0

私はページIDと一致するキーワードのコレクションを返したいと思います。私は1つのキーワードがありません。私はコレクションが好きですか? – deDogs

関連する問題