【发布时间】:2023-04-11 01:45:01
【问题描述】:
我正在尝试创建一个视图模型,用于汇总我的应用程序中每个公司的信息。不幸的是,对于我的生活,我无法获得所需的结果......我看到了示例和其他问题,它们很有意义,但是当我必须编写自己的解决方案时,一切都崩溃了。
无论如何,作为一个例子,我想计算每家公司有多少个分支机构,或者公司位于多少个地点。这两者有点相似,但它们会影响我架构中的不同表。
就实际的表关系而言,以下是模型:
public class Branch
{
[Key]
public int BranchId { get; set; }
[Required]
[Display(Name = "Branch")]
public string BranchName { get; set; }
[Required]
public int CompanyId { get; set; }
[Required]
public int LocationId { get; set; }
public virtual Company Company { get; set; }
public virtual Location Location { get; set; }
}
public class Location
{
[Key]
public int LocationId { get; set; }
[Required]
[Display(Name = "Location")]
public string LocationName { get; set; }
public ICollection<Branch> Branches { get; set; }
}
public class Company
{
[Key]
public int CompanyId { get; set; }
[Display(Name = "Company")]
[Required]
public string CompanyName { get; set; }
public ICollection<Branch> Branches { get; set; }
}
ViewModel 代码:
public class CompaniesRegisterViewModel
{
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public int BranchId { get; set; }
public string BranchName { get; set; }
public int BranchCount { get; set; }
public int LocationId { get; set; }
public string LocationName { get; set; }
public int LocationCount { get; set; }
}
我当前的(不完整的)控制器代码
public ActionResult CompaniesRegisterViewModel()
{
var currentUser = User.Identity.GetUserId();
var companyList = _db.Companies.ToList();
var branchList = _db.Branches.Where(x => x.Company.CompanyId == );
int count = 0;
foreach (var branch in branchList)
count++;
var personVmList = companyList.Select(x =>
new CompaniesRegisterViewModel
{
CompanyName = x.CompanyName,
CompanyId = x.CompanyId,
BranchCount = count,
LocationCount = _db.Locations.Count(x => x.LocationId == )
//BranchId = x.BranchId,
//BranchName = x.Branch.BranchName
}).ToList();
return View(personVmList);
//}
//return View();
}
如上所示,我试图以某种方式获取并传递该列表索引中的公司 ID。我一定做错了,因为到目前为止我没有尝试过。
from loc in Locations
join br in Branches on loc.LocationId equals br.LocationId
select loc.LocationName
上面的LINQ查询是不是一个好方向?
更新 #1
public ActionResult CompaniesRegisterViewModel()
{
var companyList = _db.Companies.ToList();
var companyList1 = _db.Companies.GroupBy(x => x.CompanyId);
//PersonInCompanyViewModel personInCompanyVM = new PersonInCompanyViewModel();
var test = _db.Companies.GroupBy(info => info.CompanyId)
.Select(group => new
{
CompanyId = group.Key,
Count = group.Select(x => x.Branches).Count()
}).OrderBy(x => x.CompanyId);
var branches = _db.Branches.GroupBy(info => info.BranchId)
.Select(group => new
{
BranchId = group.Key,
Count = group.Count()
}).OrderBy(x => x.BranchId);
var test2 = branches.AsQueryable().Select(x =>
new CompaniesRegisterViewModel
{
BranchCount = x.Count
});
var branchlist = _db.Branches.ToList();
var branchCount =
from p in companyList
group p by p.Branches into g
select new { Branch = g.Key, BranchCount = g.Count() };
var personVmList = companyList.Select(x =>
new CompaniesRegisterViewModel
{
CompanyName = x.CompanyName,
CompanyId = x.CompanyId,
BranchCount = branchCount.Count()
//BranchCount = _db.Companies.GroupBy(b => b.CompanyId).Count(1, d => d.Branches.Count)
//LocationCount = companyList1.Count()
//BranchId = x.BranchId,
//BranchName = x.Branch.BranchName
}).ToList();
return View(personVmList);
//}
//return View();
}
【问题讨论】:
-
您应该使用
.GroupBy()按公司 ID(或名称)对公司进行分组(然后将.Count()用于分支机构) -
我已经尝试根据您的建议找到解决方案,但我认为我仍然失败了。您能否提供更多详细信息或举例说明?
-
我已经在上面的代码中添加了我的尝试。
-
var model = _db.Companies.GroupBy(x => new { ID = x.CompanyId , Name = x.CompanyName }).Select(y => new CompaniesRegisterViewModel{ CompanyId = y.Key.ID, CompanyName = y.Key.CompanyName, BranchCount = y.Count() });应该这样做
标签: c# asp.net-mvc linq asp.net-mvc-5 linq-to-sql