2017-03-17 51 views
0

我有2類A和B,其中,我希望執行LINQ查詢返回類A(與它的所有成員)加入來自枯草LINQ的執行與具有場沿場更新

這裏是類中,我就要回:

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; } 
    // ... 
} 

這是在我加入反對階級:

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; } 
    // ... 
} 

我已經嘗試下面的變化,但我無法得到它加工。

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

我只是得到一個所有成員,但我在class Apoints變量爲空。我知道我需要從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); 

或者在同一行:

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

但是,你應該對它進行測試。

+0

有沒有一種方法來創建類'A',而不是匿名類? – usr4896260

+1

然後您需要分配值或重新創建類。我會舉一個例子。問題是,你無法更新行。你需要在數據庫中更新行嗎? –

+0

這一行幾乎奏效。它在發生點賦值時拋出一個錯誤:'帶有語句正文的lambda表達式不能轉換爲表達式樹。一個表達式樹可能不包含賦值操作符' – usr4896260

1

我認爲這是你想要的

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

,如果你想在ClassA的,試試這個

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