2017-10-12 2 views
0

を注文しています。C#のLINQは、条件と私は(簡体字)次のセットアップを持っている

基本的には、すべての親子を含めるようにしていますが、IDの降順で並べ替えてから最初のもの(たとえば最新のもの)がimported == falsetimeSpan == nullであるかどうかを確認し、この条件を満たす。

var relevant = context.parent 
       .include(x => x.child); 

をして、私は必要なデータを抽出し、それはLINQのを使用して1でそれを行うことが可能である:

は、私はこれを行うことができます知っていますか?

+0

多分関連https://stackoverflow.com/questions/32751427/conditional-include-inentity-framework – OmG

答えて

1

タグを使用している場合linq-to-entitiesエンティティフレームワークを使用していると仮定します。

親と子の間に1対多の関係があります。すべての親は0以上の子を持ち、すべての子はちょうど1つの親に属しています。

多対多の関係になっている可能性もあります。クラスはわずかに異なります(データベースにはDbContextにはない余分なテーブルがあります)が、問題は変わりません。

あなたの単純化のためかもしれませんが、あなたの問題を引き起こす可能性のある奇妙なことがクラス内で見られます。以下のように適切な1対多の関係がモデル化されたエンティティフレームワークでは

public class Parent 
{ 
    public int Id {get;set;} 
    public string name{get;set;} 

    // Every parent has zero or more Children 
    public virtual ICollection<Child> Children {get;set;} 
} 

public class Child 
{ 
    public int id {get;set;} 
    public bool Imported{get;set;} 
    public DateTime? TimeSpan {get;set;} 

    // every Child belongs to exactly one Parent using foreign key 
    public int ParentId {get; set;} 
    public Parent Parent {get; set;} 
} 

あなたの親の子どもたちのコレクションが一覧にすることはできません。 ChildList [3]とはどういう意味ですか?

基本的に、私はすべての親の子を含めるようにしようとしていますが、順番 彼らチェックしたID降順によると:

また、このコレクションは、(SO: Understanding code first virtual propertiesを参照)は、仮想である必要があり

あなたは書きました最初のもの(たとえば最新のもの) が== falseおよびtimeSpan == nullをインポートし、この条件を満たす子を持つ 親行のみをインポートした場合。

ビットは難しい理解し、あなたが親の配列を有しているようだ、とあなたは最高たchildID児が輸入し、ヌルのTimeSpanを持っていない場合にのみ、それらの親とその子供たちを、したいです。

var result = dbContext.Parents 
    .Select(parent => new 
    { 
     // Take all Parent properties you need in your end result, for example 
     Id = parent.Id, 
     Name = parent.Name, 
     Children = parent.Children 
      .OrderByDescending(child => child.Id), 
    }) 
    .Select(parent => new 
    { 
     Id = parent.Id, 
     Name = parent.Name, 
     Children = parent.Childrent, 
     NewestChild = parent.Children.FirstOrDefault(), 
    }) 
    // keep only the parents you want to keep: 
    .Where(parent => parent.NewestChild != null 
     && !parent.NewestChild.Imported 
     && parent.NewestChild.TimeSpan == null)); 
関連する問題