【问题标题】:C# Entity Framework join tablesC# Entity Framework 连接表
【发布时间】:2021-03-06 14:37:17
【问题描述】:

我试图获得与使用实体框架方法语法的 SQL 查询相同的结果。

SQL 查询:

select 
    mr.*, mrf.userId as RequesterUserId, mrt.UserId as ReceiverUserId 
from 
    MoneyRequests mr
inner join  
    MoneyReqFrom mrf on mr.MoneyRequestId = mrf.MoneyRequestId
inner join  
    MoneyReqTo mrt on mr.MoneyRequestId = mrt.MoneyRequestId
where 
    mr.MoneyRequestId = 'acfc8008-4cf7-47ec-a3fe-0fe245af77cc'

EF Linq 方法语法:

var moneyreqResponse = context.MoneyRequests
                              .Join(context.MoneyReqFroms, 
                                      mr => mr.MoneyRequestId, 
                                      mrf => mrf.MoneyRequestId, 
                                      (mr, mrf) => new 
                                                   { 
                                                       MoneyRequestId = mr.MoneyRequestId,
                                                       Amount = mr.Amount,
                                                       RequestType = mr.RequestType,
                                                       CreationDate = mr.CreationDate,
                                                       RequesterUserId = mrf.UserId 
                                                    }) 
                              .Join(context.MoneyReqTos, 
                                       mr => mr.MoneyRequestId, 
                                       mrt => mrt.MoneyRequestId,
                                       (mr, mrt) => new 
                                                    { 
                                                        MoneyRequestId = mr.MoneyRequestId,
                                                        Amount = mr.Amount, 
                                                        RequestType = mr.RequestType,
                                                        CreationDate = mr.CreationDate,
                                                        ReceiverUserId = mrt.UserId, 
                                                        Email = mrt.Email 
                                                    }) 
                              .Where(fullEntry => fullEntry.MoneyRequestId == "acfc8008-4cf7-47ec-a3fe-0fe245af77cc") 
                              .ToList();

我从数据库中检索除RequesterUserId 列之外的数据。

你知道为什么吗?

谢谢

【问题讨论】:

  • 你是什么意思你检索数据除了那一列?是˙null˙吗?还是不包含在对象中?

标签: c# asp.net-core entity-framework-core asp.net-core-webapi


【解决方案1】:

您的查询返回 MoneyRequests 类型,我相信它不包含 RequesterUserId

您应该使用所需的所有属性(连接返回的属性)定义一个新类型,并将其添加到您的 DbContext。

您可能还想将新类型标记为keyless

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多