我有兩個簡單的資料庫模型類:
application_user.cs:
public partial class application_user
{
public int Id { get; set; }
public string Name { get; set; }
}
application_user_card.cs:
public partial class application_user_card
{
public int Id { get; set; }
public int User_Id { get; set; }
public string Card_Id { get; set; }
}
我想選擇所有用戶的串列,每個用戶都包含一個卡 ID 串列。這是業務邏輯的資料模型:
用戶.cs:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public List<string> CardIds { get; set; }
}
這是我當前的代碼。老實說,我不太了解分組語法,或者更準確地說,我不太了解如何cardIds在我的查詢中包含資料。
List<UserGroup> userGroups = from user in pigDbAccountEntities.application_user
join cardIds in pigDbAccountEntities.application_user_card on user.Id equals cardIds.User_Id
where user.Delete_Time == DateTime.MinValue
group user by user.Id into gUser
select new UserGroup
{
Id = gUser.Key,
Name = gUser.FirstOrDefault().Name,
CardIds = new List<string>() { cardIds.Card_Id.ToList() }
};
有什么辦法可以在單個查詢中完成我想做的事情嗎?
uj5u.com熱心網友回復:
我沒有在您的問題中看到定義的 Delete_Time,因此我在查詢中將其洗掉。但是看起來您需要更改“組”行以同時具有用戶和 cardId,這將創建您從中選擇的匿名物件。
var userGroups = from user in pigDbAccountEntities.application_user
join cardIds in pigDbAccountEntities.application_user_card on user.Id equals cardIds.User_Id
group new { user, cardIds } by user.Id into gUser
select new UserGroup
{
Id = gUser.Key,
Name = gUser.FirstOrDefault().user.Name,
CardIds = gUser.Select(x => x.cardIds.Card_Id).ToList()
};
這將回傳一個 IEnumerable 但如果您想要一個串列,只需呼叫 userGroups.ToList() 或最后:
List<UserGroup> userGroups = (from user in pigDbAccountEntities.application_user
join cardIds in pigDbAccountEntities.application_user_card on user.Id equals cardIds.User_Id
group new { user, cardIds } by user.Id into gUser
select new UserGroup
{
Id = gUser.Key,
Name = gUser.FirstOrDefault().user.Name,
CardIds = gUser.Select(x => x.cardIds.Card_Id).ToList()
}).ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/534663.html
標籤:C#实体框架
