LINQ(C#)Join - 在单行中显示重复数据(Pivot) [英] LINQ (C#) Join - Displaying duplicated data in single row (Pivot)

查看:177
本文介绍了LINQ(C#)Join - 在单行中显示重复数据(Pivot)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试加入一个表并查看并在数据表中显示结果。

考虑我的场景(数据库):

表格:请求

RequestId               SurrogateId

RequestId              SurrogateId

1                                   1

1                                  1

2                                     2

2                                    2

查看:DemoView

View : DemoView

SurrogateId        ;   ApproverName              ApproverType

SurrogateId          ApproverName              ApproverType

1                            拉姆                             
财务

1                            Ram                             Finance

1                             萨姆                             
管理员

1                            Sam                             Admin

1                            丹                                 Manager

1                            Dan                               Manager

2                             ABC                               
财务

2                            abc                               Finance

我的要求是在DataTable的UI上显示如下:

RequestId         SurrogateId         金融及NBSP;        经理         管理员

RequestId        SurrogateId          Finance          Manager          Admin

1                            1                    
Ram             山姆               Dan

1                           1                     Ram              Sam               Dan

2                             2                     
abc

2                            2                      abc

我尝试过以下查询:

var query = (

 from request in DB.Request

 join financeaprv in DB.DemoView on request.SurrogateID equals financeaprv.SurrogateID into financeaprvList
                             from financeaprv in financeaprvList.DefaultIfEmpty()
                             where financeaprv.ApproverType=="Finance"

  join sysadmin in DB.DemoView on request.SurrogateID equals sysadmin.SurrogateID into sysadminList
                             from sysadmin in legalaprvList.DefaultIfEmpty()
                             where sysadmin.ApproverType=="Admin"

  select new queryResult                             
  {
        RequestId = request.RequestId,
        FinanceApprv = financeaprv.ApproverName,
        Admin = sysadmin.ApproverName

  }

但是连接不正确,因为不返回所有行。 (加入RequestID和SurrogateId
并不是一个问题,因为它很直接。  它正在加入管理,财务和经理我'我无法完成)

But the join is not correct as not returns all rows.(Joining RequestID and SurrogateId is not much of an issue as it's straight forward.   It's joining Admin,Finance and Manager I'm unable to accomplish)

任何人都可以告诉LINQ查询(在查询语法中)是什么来完成我的要求。

Can anybody tell what would be the LINQ query ( in Query syntax ) to accomplish my requirement.

提前致谢。

注意: - 我是
每次有意加入DemoView (而不是一次性将所有值存储在列表中)到期出于要求原因...我正在尝试以与上面提到的相同的方式完成查询。

Note :- I'm intentionally joining DemoView each time (instead of storing all it's value in a list at once) due to requirement reasons... I'm trying to accomplish the query in the same way I've mentioned above.

推荐答案

根据
https://social.msdn.microsoft.com/Forums/en-US/e09b50af-5ab4-4cfb-9617 -ef2be339c17f
,尝试一个复杂的"开启"条件,没有'where',可能是这样的:

According to https://social.msdn.microsoft.com/Forums/en-US/e09b50af-5ab4-4cfb-9617-ef2be339c17f, try a complex ‘on’ condition without ‘where’, probably like this:

from request in DB.Request
join financeaprv in DB.DemoView on new { request.SurrogateID, ApproverType = "Finance" } equals new { financeaprv.SurrogateID, financeaprv.ApproverType } into financeaprvList
from financeaprv in financeaprvList.DefaultIfEmpty() 
. . .

生成最终输出值时,请检查数据是否为null,例如'选择新{FinanceApprv = financeaprv?.ApproverName,...'

When you generate the final output values, check the data for null, like ‘select new { FinanceApprv = financeaprv?.ApproverName, …’.


这篇关于LINQ(C#)Join - 在单行中显示重复数据(Pivot)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆