2014-10-17 45 views
0

我在LINQ下面想要返回到collectionList。如何将LINQ Anonymoustype返回到键入的集合

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类有许多id,name和value作为datamember。

任何想法如何为此类型转换?

回答

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

没有必要使用匿名类型,只是直接投射到您的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") 
       };