簡體   English   中英

如何在 Linq <> ASP.NET MVC <> C# 中使用“IN”語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM