[英]How to utilize C# properties correctly in this specific ASP.NET MVC scenario?
[英]How to utilize “IN” statement with Linq <> ASP.NET MVC <> C#
我很難找到實現 IN 語句的最佳方法。
目前,我在控制器中使用以下代碼返回特定於個人客戶帳戶的立場列表。
return _context.Stances
.ToList()
.Select(Mapper.Map<Stances, StancesDto>)
.Where(c => c.AccountGUID == userAccountID.CustomerGUID);
我正在創建一個合作伙伴門戶,該門戶允許合作伙伴用戶訪問許多其他客戶帳戶,每個客戶都可以訪問這些帳戶。
我設置了一個存儲 PartnerGUID 和 CustomerGUID 的 partnerLink 表,將關系結合起來。 我遇到的困難是找到一種方法來允許使用“IN”或“包含”選項建立一對多關系。
我想做的是這樣的:
要么加載列表,如果它只是一個客戶“或”如果它是一個合作伙伴帳戶加載合作伙伴鏈接表中的所有客戶立場。
var partners = _context.PartnerLinks
.Where(user => user.PartnerGUID == userAccountID.CustomerGUID)
.Select(user => user.AccountGUID) // extract the emails from users
.ToList();
return _context.Stances
.ToList()
.Select(Mapper.Map<Stances, StancesDto>)
.Where(c => c.AccountGUID == userAccountID.CustomerGUID || partners.Contains(c.AccountGUID));
組合 LINQ 查詢時不應使用ToList
。 一切都應該是 IQueryable。
var partners = _context.PartnerLinks
.Where(user => user.PartnerGUID == userAccountID.CustomerGUID)
.Select(user => user.AccountGUID);
return _context.Stances
.Where(c => c.AccountGUID == userAccountID.CustomerGUID || partners.Contains(c.AccountGUID))
.AsEnumerable()
.Select(Mapper.Map<Stances, StancesDto>);
還可以考慮使用 Automapper 的ProjectTo
return _context.Stances
.Where(c => c.AccountGUID == userAccountID.CustomerGUID || partners.Contains(c.AccountGUID))
.ProjectTo<StancesDto>(configuration);
我認為你可以通過聯盟來做到這一點。
有時像:
return _context.Stances.Select(Mapper.Map<Stances, StancesDto>).Where(c => c.AccountGUID == userAccountID.CustomerGUID)
.Union(_context.Stances.Select(Mapper.Map<Stances, StancesDto>).Where(c => partners.Contains(c.AccountGUID)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.