我正在構建一個Web API項目,該項目可供第三方使用,也可供我自己的Web應用程序使用。 Web API方法將返回複雜類型/對象的JSON表示。這些是預先定義的類,我可以向第三方提供,以便他們瞭解數據的結構以及可以反序列化JSON。我會將這些課程稱爲DTO課程,直到有人糾正我爲止。如何將Linq結果轉換爲DTO類對象而無需迭代
我有以下的自動生成的實體模型(來自數據庫)以及這是User類反正用的掃描表的關係(關係可以爲這個問題的目的被忽略)...
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類,我想返回到表示層作爲列表(我不認爲我應該使用IEnumerable業務來演示?)。
public class User
{
public int Id;
public string Username;
public string Password;
public bool Active;
}
此組件的業務層當前如下所示。使用Linq從數據庫中獲取用戶,然後解析結果並返回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查詢,並且我也不確定如何編寫類似於上述引用問題中的查詢的查詢,但對於我更簡單的情況。
在此先感謝您的幫助。
P.S.請忽略我通過Web API公開用戶名和密碼的事實以及我一次返回所有用戶的事實。以上是針對此問題的代碼的簡化版本。
無論發生什麼,你都會迭代。你可以使用'Enumerable.Select'來轉換你的列表。 – Romoku 2013-02-27 23:58:57