列出匿名类型

时间:2012-03-13 17:55:34

标签: asp.net linq

这是我的代码

var personalInfoQuery = from t in crnnsupContext.Tombstones.Include("ProvState")
                        join n in crnnsupContext.NursingSchools 
                                     on t.NursingSchool equals n.SchoolID
                        where t.RegNumber == _username
                        select new { t, n };

然后我尝试将personalInfoQuery放入像

这样的列表中
List<> personalInfoResult = personalInfoQuery.ToList();

但如何在列表中表示匿名类型?

我需要将其插入缓存中 所以Cache.Insert("personalInfo", personalInfoQuery.ToList()) 然后Cache["personalInfo"] becomes an object, how can i read data from it?

2 个答案:

答案 0 :(得分:3)

这正是var关键字的用途。

所以而不是:

List<> personalInfoResult = personalInfoQuery.ToList();

使用它:

var personalInfoResult = personalInfoQuery.ToList();

编译器将自己确定确切的类型,您不需要指定任何内容。这绝不是不安全的,即使你没有定义类型,它仍然是100%打字的。

答案 1 :(得分:3)

由于您的类型需要由多个方法使用(它需要由一个方法创建并由另一个方法读取),因此使用匿名类型是不合适的。只需创建一个简单的类型:

public class TombstoneNursingSchool
{
    public Tombstone Tombstone { get; set; }
    public NursingSchool NursingSchool { get; set; }
}

像这样创建:

var personalInfoQuery = from t in crnnsupContext.Tombstones.Include("ProvState")
                        join n in crnnsupContext.NursingSchools 
                                     on t.NursingSchool equals n.SchoolID
                        where t.RegNumber == _username
                        select new TombstoneNursingSchool {
                            Tombstone = t, 
                            NursingSchool = n 
                        };

制作一个这样的清单:

List<TombstoneNursingSchool> personalInfoResult = personalInfoQuery.ToList();

将它放在缓存中,如下所示:

Cache.Insert("personalInfo", personalInfoQuery.ToList())

从缓存中取出并按如下方式阅读:

foreach(var tn in (List<TombstoneNursingSchool>)Cache["personalInfo"])
{
     // do something with tn.Tombstone and tn.NursingSchool
}

匿名类型在单个方法中很方便,但它们不适合每个情况。如果您需要,请不要害怕制作命名类型。