如何会话匿名类型
本文关键字:类型 会话 何会话 | 更新日期: 2023-09-27 18:00:54
我将来自两个表的联接存储在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 ]]
但我不知道如何将其翻译成普通类型。你会如何进行这种"转换"?
Linq-To-Sql
类作为分部生成。这意味着您可以将具有相同类名的单独代码文件声明为分部,以添加所需的额外属性。
public partial class Table1
{
.... auto generated stuff ....
}
如何扩展它,创建另一个这样的文件:
public partial class Table1
{
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 { t, j };
foreach(var x in results)
x.t.Table2 = x.j;
return results.Select(x => x.t).ToList();
现在,该列表中的每个Table1
实例都包含Table2
作为属性。
下面是一个存储您需要的两个对象的示例类:
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"];
这可能是你需要的,也可能不是,所以请随时发表评论。
如果创建视图模型(如果是用于web视图(会怎样:
class YourViewModel()
{
public object Table1 {get; set;}
public object Table2 {get; set;}
YourViewModel(dynamic LINQResult)
{
this.Table1 = LINQResult.prop1;
this.Table2 = LINQResult.prop2;
}
}
将对象更改为您的类型,将道具名称等更改为您自己的名称。