如何将LINQ Anonymoustype返回到类型化集合

时间:2014-10-17 15:34:09

标签: c# linq

我在LINQ之下,我想返回到collectionList。

var StudIds = from _NewIds in NewIds.AsEnumerable()
           join _OldIds in allOldIds.AsEnumerable()
           on _NewIds.Field<int>("Id") equals _OldIds.Field<int>("Id")
           where _NewIds.Field<Boolean>("IsExist") == true && _NewIds.Field<string>("FieldName") == "FinalValue"
           select new
           {
               Id = _NewIds.Field<int>("Id"),
               Name = _NewIds.Field<string>("Name"),
               Value = _NewIds.Field<decimal>("PRice")
           };



List<std> lstCustomWebsiteVerifiedIndex = new List<std>();

这个Std类是haivg Id,name和Value as datamember。

知道如何对此进行类型转换吗?

2 个答案:

答案 0 :(得分:1)

首先,您应该使用std类,而不是将其投影到匿名类:

  select new std
      {
          Id = _NewIds.Field<int>("Id"),
          Name = _NewIds.Field<string>("Name"),
          Value = _NewIds.Field<decimal>("PRice")
      };

以后你可以这样做:

List<std> lstCustomWebsiteVerifiedIndex  = StudIds.ToList();

但如果您的类std是通过某个框架(如实体框架)生成的,那么您将无法使用投影,在这种情况下,您将需要一个临时类。

此外,如果您无法修改现有代码(使用匿名类),那么您可以使用查询投影到列表中,如:

List<std> lstCustomWebsiteVerifiedIndex = StudIds.Select(r=> new std
                                            {
                                              Id = r.Id, 
                                              Name = r.Name, 
                                              Value = r.Value,
                                            })
                                           .ToList();

答案 1 :(得分:1)

无需使用匿名类型,只需直接投射到std类型:

var StudIds = from _NewIds in NewIds.AsEnumerable()
              join _OldIds in allOldIds.AsEnumerable()
              on _NewIds.Field<int>("Id") equals _OldIds.Field<int>("Id")
              where _NewIds.Field<Boolean>("IsExist") == true && _NewIds.Field<string>("FieldName") == "FinalValue"
              select new std
              {
                  Id = _NewIds.Field<int>("Id"),
                  Name = _NewIds.Field<string>("Name"),
                  Value = _NewIds.Field<decimal>("PRice")
              };