首页 > 解决方案 > 使用 linq c# 进行联合

问题描述

我正在尝试在 c# 中使用 linq 查询两个表。这两个表是 ManagerStrategy 和 Fund 表。一种经理策略将有一个或多个基金。我基本上需要一个以以下格式返回数据的结果集。Fund 表有 managerstrategy_id 外键

例如

 ManagerStategyId, ManagerStrategyName
 ManagerStrategyId, FundName
 ManagerStrategyId, FundName
 ManagerStrategyId, FundName
 ManagerStategyId, ManagerStrategyName
 ManagerStrategyId, FundName
 ManagerStrategyId, FundName

我尝试了以下查询,但不确定如何根据上述格式提取数据

  const int INVESTED = 1;
  const int REDEEMING = 4;
  const int ILIQUID = 134;

我在下面尝试过,但不确定使用 linq 是否正确有效?

如果 Id 和 Name 对,我想要做的是获取 Strategies 列表。获取与策略匹配的基金列表。生成一个再次包含 Id 和 Name 对的列表。这里的 id 将是资金表中的外键。最后一步是合并这个列表和策略列表以获得上述格式。

根据过滤条件获取所有策略

var strategies = GetService<MANAGERSTRATEGY>().Where(x => x.INVESTMENT_STATUS_ID == INVESTED || x.INVESTMENT_STATUS_ID == REDEEMING || x.INVESTMENT_STATUS_ID == ILIQUID).Select(x => new ListItemVM() {Id = x.ID, Name = x.NAME_TEXT}).ToList();

获取所有资金

 var funds = GetService<FUND>().GetAll().Select(x => new ListItemVM() { Id = x.MANAGERSTRATEGY_ID.GetValueOrDefault(), Name = x.NAME_TEXT }).ToList();

进行内部连接以获取具有匹配策略的资金

var strategyFunds = strategies.Join(funds, x => x.Id, y => y.Id,(x, y) => new ListItemVM() { Id = x.Id, Name = x.Name }).ToList();

做一个联盟以在一个列表中获得策略和资金。

var managerStrategyFunds = strategies.Union(strategyFunds);

 var managerStrategyFundViewModel = new List<ManagerStrategyFundViewModel>();

                foreach (var item in managerStrategyFunds)
                {

                    var summary = new ManagerStrategyFundViewModel
                    {
                        ManagerStrategyId = item.Id,
                        ManagerStrategyName = item.Name
                    };

                    managerStrategyFundViewModel.Add(summary);
                }

                var viewModel = managerStrategyFundViewModel.OrderBy(x => x.ManagerStrategyName).ToList();

                return viewModel;

标签: c#linq

解决方案


推荐阅读