2017-03-17 6 views
0

を行います私は帰国していているクラス:私は、次のバリエーションを試みたが、私はそれを取得することができませんでしたLINQのは、私がここでB.</p> <p>からのフィールドと一緒に(そのすべてのメンバーと)クラスAを返すLINQクエリが実行したいに2クラスAとBを、持って更新フィールドで参加

public partial class B 
{ 
    // fields in B 
    public int classID { get; set; } 
    public string mem_1B { get; set; } 
    public string mem_2B { get; set; } 
    public int points { get; set; } 
    // ... 
} 

public partial class A 
{ 
    // fields in A 
    public int classID { get; set; } 
    public string mem_1A { get; set; } 
    public string mem_2A { get; set; } 
    public int points { get; set; } 
    // ... 
} 

をここでは、私は反対参加していているクラスでありますワーキング。

var db = new MyDBContext(); 

IEnumerable<A> result1 = 
    from tblA in db.A 
    join tblB in db.B on tblA.classID equals tblB.classID 
    select tblA; 

IEnumerable<A> result2 = db.A.Join(db.B, x => x.classID, y => y.classID,(x,y) => x); 

IてるだけA内のすべてのメンバーを得るが、class Aの私points変数が空です。私はBのポイントから課題を実行する必要があることを知っていますが、私はどのように行うのか分かりません。これを行う適切な方法は何ですか?

答えて

2

あなたはこれを試してみてください:

var result1 = 
    from tblA in db.A 
    join tblB in db.B on tblA.classID equals tblB.classID 
    select new { ClassA = tblA, PointsOfB = tblB.points }; 

それはTBLAとTBLBのポイントを保持している匿名クラスを作成します。


更新現在値:

var result1 = 
    (from tblA in db.A 
    join tblB in db.B on tblA.classID equals tblB.classID 
    select new { ClassA = tblA, PointsOfB = tblB.points }).ToArray(); // <-- note this.... 

foreach(var r in result1) 
    r.ClassA.points = r.PointsOfB; 

IEnumerable<A> classAUpdated = result1.Select(a => a.ClassA); 

または1行で:

IEnumerable<A> classAList = db.A 
    .Join(db.B, a => a.classID, b => b.classID,(a,b) => new 
     { 
      ClassA = a, 
      PointsOfB = b.points 
     }).ToArray() // <---------- to persist it 
    .Select(ab => 
     { 
      ab.ClassA.points = ab.PointsOfB; 
      return ab.ClassA; 
     }); 

しかし、あなたはそれをテストする必要があります。あなたはクラスAでそれをしたい場合、私は、これはあなたが

var result2 = db.A.Join(db.B, x => x.classID, y => y.classID,(x,y) => 
       new{classA = x, 
       pontOfB = y.points }); 

欲しいものであることを前提としてい

+0

を試してみてください? – usr4896260

+1

次に、値を割り当てるか、クラスを再作成する必要があります。私は例を挙げます。問題は、行を更新できないことです。行をデータベース内で更新可能にする必要がありますか? –

+0

1行はほとんど働いた。ポイント代入が発生すると、エラーが返されます。 '文の本文を持つラムダ式を式ツリーに変換できません。式ツリーに代入演算子 ' – usr4896260

1

、クラス `A`代わりの匿名クラスを作成する方法があります。この

var result2 = db.A.Join(db.B, x => x.classID, y => y.classID,(x,y) => 
       new classA { 
       classId = x.classId, 
       mem_1a = x.mem_1a, 
       mem_1b = x.mem_1b,     
       points = y.points }); 
+0

匿名クラスの代わりにクラス 'A'を作成する方法はありますか? – usr4896260

+1

ここであなたのポイントをbから保存しますか?別のアプローチはclassAとメンバーとしてポイントを持つ新しいクラスを作成することです – CPR43

+0

'B'のポイントは' A'に保存されます。したがって、A.points = B.pointsです。 – usr4896260

関連する問題