在查询中使用IEnumerable()来获取匿名值以查看模型的意义

时间:2014-11-17 04:30:05

标签: c# linq entity-framework linq-to-entities

我只是不明白在linq查询中编写AsEnumerable()的含义。

我有一个UserDetail表,我在其中获取用户的所有详细信息,我想采取 姓名,发邮件到我的模特。

 var data = context.UserDetails
                   .Select(temp => new FullName = temp.Fullname, Email = temp.Email })
                   .ToList()
                   .AsEnumerable()
                   .Select(d => new UserDetailsModel { Fullname = d.FullName, Email = d.Email })
                   .ToList();

AsEnumerable()的含义是什么,因为当我删除它时没有错误,但我已经看到他们使用这种方法的一些查询。

有没有人有更好的方法将匿名对象值带入我的View模型?

它是否提高了性能?这种方法有什么意义?任何人都可以根据我的问题和细节向我解释这个方法吗?

2 个答案:

答案 0 :(得分:0)

您的第一个select正在查询数据库并返回IQueryable<T>.AsEnumerable()将其设为IEnumerable<T>IQueryable<T>扩展IEnumerable<T>,无论您使用IEnumerable<T>做什么,您都可以使用IQueryable<T>

您经常使用.AsEnumerable()来实现查询,以便可以对结果集执行其他非sql语句as per this example

您可以将代码简化为

var data = (from temp in context.UserDetails select temp)
  .Select(d => new UserDetailsModel
  {
    Fullname = d.fullName,
    Email = d.Email
  }).ToList()); // or AsEnumerable()

答案 1 :(得分:0)

ToList()AsEnumerable()的工作方式相似,您不需要两者。 ListIEnumerable +一些附加功能,例如Add(),Count等,使用其中任何一个的想法都是为了实现查询(IQueryable)。

此外,您不需要 temp 查询,可以直接选择:

var data = context.UserDetails
                   .Select(d => new UserDetailsModel {...})
                   .ToList()); // or AsEnumerable()