如何在LINQ中执行GroupBy多列
SQL中与此类似的东西:
SELECT * FROM <TableName> GROUP BY <Column1>,<Column2>
Run Code Online (Sandbox Code Playgroud)
如何将其转换为LINQ:
QuantityBreakdown
(
MaterialID int,
ProductID int,
Quantity float
)
INSERT INTO @QuantityBreakdown (MaterialID, ProductID, Quantity)
SELECT MaterialID, ProductID, SUM(Quantity)
FROM @Transactions
GROUP BY MaterialID, ProductID
Run Code Online (Sandbox Code Playgroud) 我有一个项目集合,这里是:
AgencyID VendorID StateID Amount Fee
1 1 1 20.00 5.00
1 1 1 10.00 2.00
1 1 1 30.00 8.00
2 2 1 20.00 5.00
2 2 1 5.00 5.00
1 1 2 20.00 5.00
2 2 2 20.00 5.00
2 2 2 40.00 9.00
1 2 2 35.00 6.00
1 2 2 12.00 3.00
Run Code Online (Sandbox Code Playgroud)
我希望根据AgencyID,VendorID和StateID对这些项目进行分组,并根据金额和费用(金额+费用)计算总计
所以使用上面的数据,我想得到这些结果:
AgencyID VendorID StateID Total
1 1 1 75.00
2 2 1 35.00
1 1 2 25.00
2 2 2 74.00
1 2 …Run Code Online (Sandbox Code Playgroud) 我有一个这种格式的数据列表 -
User Role Code
John admin 101
John admin 101
John admin 100
Smith superadmin 150
Smith superadmin 120
Smith superadmin 130
Smith superadmin 140
Smith superadmin 160
John review 180
John review 190
John review 200
Run Code Online (Sandbox Code Playgroud)
我想根据这样的普通用户折叠它 -
User Role Code
John admin 100,101
Smith superadmin 120,130,140,150,160
John review 180,190,200
Run Code Online (Sandbox Code Playgroud)
我试过这个 -
result = userRoles.GroupBy(l => l.User).Select(u => new UserRole()
{
Code = string.Join(", ", userRoles.Where(d => d.User == u.Key)
.Select(d => d.Code)
.ToArray()),
User = u.Key,
}).ToList(); …Run Code Online (Sandbox Code Playgroud) 我有一个通用的Policy对象列表.
该列表包含以下数据
id policyNumber policySequence otherData
1 101 1 aaaa
2 101 2 bbbb
3 101 3 cccc
4 102 1 dddd
5 103 1 eeee
6 103 2 ffff
Run Code Online (Sandbox Code Playgroud)
我想为每个policyNumber选择包含最高policySequence的一行,以便我最终得到以下结果:
id policyNumber policySequence created
3 101 3 cccc
4 102 1 dddd
6 103 2 ffff
Run Code Online (Sandbox Code Playgroud)
我在下面使用foreach有一个解决方案,但是想知道在LINQ中是否有更简单,更清晰的方法来执行此操作?
class Program
{
static void Main(string[] args)
{
List<Policy> policyList = new List<Policy>
{
new Policy {id = 1, policyNumber = 101, policySequence = 1, otherData = "aaaa"},
new Policy {id = …Run Code Online (Sandbox Code Playgroud) 我需要在五个列上加入两个实体,并且需要在SELECT中的每一列上加上GROUP BY,并在每个GROUP BY上获得一个COUNT。尽管这对SQL来说对我来说是小菜一碟,但我却对我为LINQ找到的每个示例都感到困惑。
我发现了以下两个问题(在多个列[重复]上的C#Linq分组依据和在多个列上分组),但我仍然对如何执行此操作感到困惑。这是我的SQL语句:
SELECT o.org_hq_name,
o.org_command_name,
o.org_region_name,
o.org_installation_name,
o.org_site_name,
o.org_subsite_name,
o.org_hq_id,
o.org_command_id,
o.org_region_id,
o.org_installation_id,
o.org_site_id,
count(org_site_id) AS count
FROM organization o, asset a
WHERE o.org_hq_id = hq_org_id
AND o.org_command_id = a.command_org_id
AND o.org_region_id = a.region_org_id
AND o.org_installation_id = a.installation_org_id
AND o.org_site_id = a.site_org_id
GROUP BY o.org_hq_name,
o.org_command_name,
o.org_region_name,
o.org_installation_name,
o.org_site_name,
o.org_subsite_name,
o.org_hq_id,
o.org_command_id,
o.org_region_id,
o.org_installation_id,
o.org_site_id
Run Code Online (Sandbox Code Playgroud)
我在下面有一个加入:
var join1 = from m in context.asset
join o in context.organization
on new {hqID = a.hq_org_id, commandID = …Run Code Online (Sandbox Code Playgroud) 我有查询返回教师名单,我需要由学校董事会和学校分组.
实际上显示数据如下:
School Board Name 1
School Name 1
Teacher Name 1
School Board Name 1
School Name 1
Teacher Name 2
School Board Name 1
School Name 2
Teacher Name 3
School Board Name 1
School Name 2
Teacher Name 4
Run Code Online (Sandbox Code Playgroud)
我需要展示的内容:
School Board Name 1
School Name 1
Teacher Name 1
Teacher Name 2
School Board Name 1
School Name 2
Teacher Name 3
Teacher Name 4
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Linq或Lambda来做这个,我不知道这是不是最好的方法.
谢谢.
我有一系列唯一键的列表
var uniqueKeys = new List<string> {"01", "04", "09", "26", "27"};
Run Code Online (Sandbox Code Playgroud)
我试图根据这些唯一键过滤另一个列表.
列表中的数据可以这样看:
To From
01 05
01 02
09 04
01 09
01 45
04 06
27 12
Run Code Online (Sandbox Code Playgroud)
我想以"To"和"From"属性值位于uniqueKeys中的方式从此列表中选择数据
期望的结果应该是:
To From
09 04
01 09
Run Code Online (Sandbox Code Playgroud)
我通过互联网浏览过很多帖子,我无法用简单的LINQ格式编写逻辑.
如果有人遇到这个问题,请帮助我.