2015-07-03 55 views
1

我存儲從兩個表中var匿名類型變量加入:如何會話匿名類型?

var results = from t in db.Table1 
       join j in db.Table2 on t.IDCourse equals j.IDCourse 
       select new { t, j }; 

現在,我需要做的就是這種類型的對象存儲在會話。但是我需要指定對象的類型。

results.GetType()我:

System.Data.Linq.DataQuery`1[<>f__AnonymousType0`2[Table1,Table2 ]] 

,但我不知道如何在普通型翻譯這個。你會如何做這種「轉換」?

+3

要麼引入一個新的類型和映射到它,要麼讀爲「動態」。 – CodeCaster

+0

@CodeCaster:使用'dynamic'我以後不能進行分組或進行LINQ查詢。這將是這種「新型」?這是一個問題... – markzzz

+0

@markzzz:你真的需要這兩種類型的匿名類型嗎?由於兩者都是相關/鏈接的,因此可以使用'Table2'屬性擴展'Table1'。然後你只需要存儲'Table1'實例,但是你可以使用它的屬性'Table2'(選擇更好的名字)。 –

回答

1

Linq-To-Sql類生成爲部分。這意味着您可以使用聲明爲partial的相同類名的單獨代碼文件來添加所需的額外屬性。在此列表中

var results = from t in db.Table1 
       join j in db.Table2 on t.IDCourse equals j.IDCourse 
       select new { t, j }; 
foreach(var x in results) 
    x.t.Table2 = x.j; 
return results.Select(x => x.t).ToList(); 

現在每Table1例如:

public partial class Table1 
{ 
    .... auto generated stuff .... 
} 

如何你可以擴展它,像這樣創建另一個文件:

public partial class Table1 
{ 
    public Table2 Table2{ get; set; } 
} 

然後你就可以通過這種方式創建一個實例包含Table2作爲財產。

+0

哦不,我不會碰LINQ-To-SQL類。由於在數據庫上進行了編輯,因此刪除表格並重新導入它們時,我在過去遇到過很多問題。 – markzzz

+0

@markzzz:然後去一個全新的班級。但是通過使用單獨的代碼文件,自動生成的東西不會與其他部分類衝突。 –

+0

不知道如果我看到它是正確的,但爲什麼在LINQ中使用連接它使「兩個」表/類? Join意味着「連接」,所以應該使用單個對象:O – markzzz

0

如果你創建視圖模型(如果它是Web視圖):

class YourViewModel() 
{ 
    public object Table1 {get; set;} 
    public object Table2 {get; set;} 

    YourViewModel(dynamic LINQResult) 
    { 
     this.Table1 = LINQResult.prop1; 
     this.Table2 = LINQResult.prop2; 
    } 
} 

更改對象的類型和道具等你的名字的名字。

1

下面是一個例子類存儲兩個對象的你需要:

public class TableStorage 
{ 
    public Table1 Table1 {get;set;} 
    public Table2 Table2 {get;set;} 
} 
... 
var results = (from t in db.Table1 
       join j in db.Table2 on t.IDCourse equals j.IDCourse 
       select new TableStorage { Table1 = t, Table2 = j }).ToList(); 

現在保存在會話中results

Session["TableData"] = results;

然後,您可以取回數據:

List<TableStorage> data = (List<TableStorage>)Session["TableData"];

這可能是也可能不是你所需要的,所以隨時發表評論。

+0

但是表(連接後)成爲一個獨特的表。爲什麼在你的例子中有一個表的列表? – markzzz

+0

獨特的表?我不確定我是否遵守。在你的例子中,你創建一個匿名類型,正如你發現並不總是最好的方法。在這裏,'TableStorage'本質上是一個包裝器,用於存儲從你的數據庫中帶回來的數據的引用,並且可以被存儲/檢索。 – Ric