【发布时间】:2013-02-27 23:55:48
【问题描述】:
我正在构建一个 Web API 项目,该项目可供第三方使用,也可供我自己的 Web 应用程序使用。 Web API 方法将返回复杂类型/对象的 JSON 表示。这些是我可以提供给第三方的预定义类,以便他们了解数据的结构并可以反序列化 JSON。在有人纠正我之前,我会将这些类称为 DTO 类。
我有以下自动生成的实体模型(来自数据库),这是 User 类,无论如何都与 Scan 表有关系(出于本问题的目的,可以忽略关系)...
public partial class User
{
public User()
{
this.Scans = new HashSet<Scan>();
}
public int Id { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public bool Active { get; set; }
public virtual ICollection<Scan> Scans { get; set; }
}
还有下面的 DTO 类,我想以 List 的形式返回到表示层(我不认为我应该使用 IEnumerable 进行业务到表示?)。
public class User
{
public int Id;
public string Username;
public string Password;
public bool Active;
}
我的这个组件的业务层目前如下所示。使用 Linq 从数据库中获取用户,然后解析结果并返回一个 List 的 POCO 用户。
public List<User> Get()
{
List<User> userList = new List<User>();
using (var db = new MyContext())
{
var query = from u in db.Users
orderby u.FirstName
select u;
foreach (var item in query)
{
User user = new User();
user.Id = item.pkUser;
user.Username = item.Username;
user.Password = item.Password;
user.Active = item.Active;
userList.Add(user);
}
}
return userList;
}
解析这样的结果似乎效率低下,我已经看到你可以在 Linq 查询中做这种事情而无需迭代(例如这个问题的答案Mapping Linq Query results to a DTO class)。
我不确定我应该在哪里/如何实现 IEnumerable 以在我的对象上启用这种类型的 Linq 查询,并且我也不确定如何编写类似于上面引用的问题中的查询,但对于我来说更简单的场景。
提前感谢您的帮助。
附:请忽略我通过 Web API 公开用户名和密码以及同时返回所有用户的事实。以上是我的代码的简化版本,用于此问题。
【问题讨论】:
-
无论如何你都会迭代。您可以使用
Enumerable.Select来转换您的列表。
标签: c# .net linq entity-framework