如何会话匿名类型

本文关键字:类型 会话 何会话 | 更新日期: 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;
    }
}

将对象更改为您的类型,将道具名称等更改为您自己的名称。