【问题标题】:SQL to LINQ query, return objects AND count nicely bundled togetherSQL to LINQ 查询、返回对象和计数很好地捆绑在一起
【发布时间】:2010-10-30 12:53:23
【问题描述】:
  • 一名员工可以拥有多辆车..
  • 一个公司可以有多名员工..

我的任务是让拥有最多车辆的公司..

我的 LINQ 查询运行良好(呸)!它返回(通过 select new {})..

  • 公司ID
  • EmployeeVehicleCount

太棒了!但是..我希望能够提取“公司”对象而不仅仅是 int CompanyID,这样我就可以在遍历结果时基本上像这样访问它们:

ResultRow.Company.CompanyName

ResultRow.EmployeeVehicleCount

否则,我将不得不首先设置一个循环,然后在我通过循环时实例化每个公司,这似乎不是很有效。

实现我所追求的最干净的方法是什么?

【问题讨论】:

  • 不发布实​​际的 linq,很难为您的特定查询提供建议

标签: c# join linq-to-sql


【解决方案1】:

如果您有 companyid 和 vehiclecount,您可以通过新的 Select ala 对其进行转换

var list = <your existing linq query>.Select(o => new { Company = <SomeDataMethod>(o.CompanyID), EmployeeVehicleCount = o.EmployeeVehicleCount });

现在你可以说

foreach (var result in list) 
{
   var s = result.Company.CompanyName +" has "+ result.EmployeeVehicleCount +" cars";
}

【讨论】:

  • 感谢您的回复。第一部分是金色的,效果很好 - 非常感谢!!!不幸的是,第二个 sn-p 对我不起作用。我得到:“'object'不包含'Company'的定义,并且找不到接受'object'类型的第一个参数的扩展方法'Company'(您是否缺少 using 指令或程序集引用?” 编译器不知道里面有一个“公司”对象。有什么想法吗?
  • 好的,当一切都只是一个 var 时,我可以让它在相同方法的上下文中工作。但是,一旦我将列表作为方法的结果返回,它就不再在该方法之外工作,因为如果我将它作为类型对象传递,它表示对象不能被 foreach 枚举。但是,如果我将它作为 IQueryable/IEnumerable 传递,那么它会说“它不包含 'Company' 的定义......”如上所述等等。
  • 我真的不想为每个按计数分组的单个查询创建一个自定义类/结构。
  • 我发现第二个问题的解决方案非常轻松,只需使用超轻量级结构即可,您可以在数据存储库类中公开该结构,以便所有人都可以看到它。完美运行,现在我的查询结果可以是强类型的,以便它们可以通过控制器传递到例如视图中。例如。公共结构 QueryResultCompanyWithCount{ 公共公司 TheCompany { 获取;放; } 公共 int 计数 { 获取;放;所以我可以制作我的方法签名: public IQueryable GetCompaniesWithMostVehicles() 并对其进行操作!
  • Hey Aaron... 看起来你已经在这里找到了你自己的东西,所以我不会评论那么多:) 关于最初的问题,确实 var 只在单个范围内有效方法。当您返回 new {} 时会发生什么,编译器将为您创建一个只有编译器知道的类,因此您必须将其分配为未知类型(var),并且从方法返回它的唯一方法是对象,然后您就失去了对我们刚刚创建的属性的访问权限。如果你需要在你的方法之外使用对象,你应该创建你自己的类:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 2011-10-15
相关资源
最近更新 更多