我在项目中使用LINQ授权。
我有这个LINQ:
var result = (from inspArch in inspectionArchives
from inspAuth in inspArch.InspectionAuthority
select new
{
Id = inspArch.Id,
clientId = inspArch.CustomerId,
authId = inspAuth.Id
}).ToList();
执行LINQ后结果具有此值:
是否有任何优雅的方式(例如使用LINQ或更改现有的LINQ)从上面的列表创建,像这样的新列表:
提前谢谢。
答案 0 :(得分:2)
我还没有构建它以查看它是否编译,但这应该有效。您需要聚合Id和AuthId字段。
var result = (from inspArch in inspectionArchives
from inspAuth in inspArch.InspectionAuthority
select new
{
Id = inspArch.Id,
clientId = inspArch.CustomerId,
authId = inspAuth.Id
})
.GroupBy(g => g.clientId)
.select(s => new {
Id = string.Join(",", s.Select(ss => ss.Id.ToString())),
ClientId = s.Key,
AuthId = string.Join(",", s.Select(ss => ss.authId.ToString()).Distinct()),
}).ToList();
答案 1 :(得分:1)
您需要date_format($date, 'Y-m-d H:i:s');
,并且可以对结果group by
应用String.Join
: -
IGrouping
这里棘手的部分是对两个对象进行分组,即 var result = (from inspArch in inspectionArchives
from inspAuth in inspArch.InspectionAuthority
group new { inspArch, inspAuth } by inspArch.CustomerId into g
select new
{
Id = String.Join(",",g.Select(x => x.inspArch.Id),
clientId = x.Key,
authId = String.Join(",",g.Select(x => x.inspAuth.Id)
}).ToList();
,因为我们需要从两者中访问属性。
<强>更新强>
由于这是实体框架,因此无法将方法new { inspArch, inspAuth }
转换为SQL,因此我们可以使用String.Join
将分组对象恢复到内存中,然后将其投影为: -
AsEnumerable