Linq Entity Framework使用聚合列选择distinct

时间:2015-12-08 09:00:08

标签: c# entity-framework linq

说我有$Serv = New-Object -TypeName PSObject $Serv | Add-Member -MemberType NoteProperty -Name Cn -Value Computername $Serv | Add-Member -MemberType NoteProperty -Name Inf -Value "" function getInf (){ $Inf = [ordered]@{ SiteConfig = "a"; BrokerController = "b"; AdminRoles = "c"; } $Serv.Inf = $Inf } getInf $ServResult = Invoke-Command -Cn $Serv.Cn -Credential $Cred -ScriptBlock { param($Serv) Invoke-Command -ScriptBlock ([ScriptBlock]::Create($Serv.getInf)) $Serv }-ArgumentList $Serv Remove-PSSession -ComputerName $Serv.Cn $ServResult.Inf usertable

ordertable的条件是我会多次获得同一个用户。

如何在Linq中执行usertabledistinct

在SQL中它是:

sum()

2 个答案:

答案 0 :(得分:1)

您可以使用GroupJoin创建一个查询,该查询汇总每个用户的订单金额:

var query = users
  .Where(user => user.Type == 1 && user.External == 1)
  .GroupJoin(
    orders,
    user => user.Id,
    order => order.UserId,
    (user, ordersForUser) => new {
      user.Name,
      user.Phone,
      Amount = ordersForUser.Sum(order => order.Amount)
    }
  );

您建议的用户名和手机查询组。此查询对用户ID进行分组,我认为这是您真正想要的。如果两个不同的用户具有相同的名称和电话,则会有所不同。

答案 1 :(得分:0)

举个例子。试试你的标准。在示例中,Count将给出具有不同的列的总和。

  from l in logins
  group l by l.Date into g
  select new
 {
  Date = g.Key,
  Count = (from l in g select l.Login).Distinct().Count() 
 };