如何会话匿名类型?

时间:2015-07-03 13:09:21

标签: c# .net linq types casting

我将来自两个表的连接存储在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 ]]

但我不确定如何在普通类型中翻译它。你会如何做这种&#34;转换&#34;?

3 个答案:

答案 0 :(得分: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"];

这可能是您要求的,也可能不是,所以请随意发表评论。

答案 1 :(得分:1)

Linq-To-Sql类生成为部分类。这意味着您可以使用声明为partial的相同类名的单独代码文件来添加所需的额外属性。

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作为属性。

答案 2 :(得分:0)

如果您创建viewmodel(如果它是用于Web视图),该怎么办:

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

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

将对象更改为您的姓名类型和道具名称等。