0

我正在尝试获取客户记录列表以及每个实体的最新 ClientNote 记录。如果客户端没有关联的注释,我希望该客户端的 ClientNote 为空(类似于 TSQL 中的 LEFT JOIN)。

我有 2 个相关的表格,如下所示:

CREATE TABLE [dbo].[Client](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ClientNumber] [varchar](10) NOT NULL,
    [Name] [varchar](100) NOT NULL,
    [AssociateName] [varchar](30) NOT NULL,
    [AssignedToID] [int] NULL,
    [District] [varchar](6) NOT NULL,
    [RegionID] [int] NOT NULL,
    [CreateDate] [datetime] NOT NULL,
)

CREATE TABLE [dbo].[ClientNote](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ClientID] [int] NOT NULL,
    [Note] [varchar](4000) NOT NULL,
    [NoteDate] [datetime] NULL,
    [TicklerDate] [datetime] NULL,
    [EnteredByAgentID] [int] NOT NULL,
    [CreateDate] [datetime] NOT NULL,
)

当 Client.Name 像 '%ike%' 并且(不存在 ClientNote 或 ClientNote CreateDate 超过 60 天)时,我需要一个 EF 左外连接来返回 Client 和最新的 ClientNote。所以,我想为每个匹配返回两个对象:一个客户端和一个可选(空)客户端注我已经尝试了很多东西,但我没有得到我想要的结果。

4

1 回答 1

0

尝试以下操作,您还可以将最后一个从 SingleOrDefault() 更改为 FirstOrDefault() 或可能更改为数组:

var clientInfo = (from a in yourdatacontext.Client
    join b in yourdatacontext.ClientNote on a.ID equals b.ID into temp
    from t in temp.DefaultIfEmpty() //this is what does the left outer join
    where a.Name.Contains("ike") && b.CreateDate > DateTime.Now.AddDays(60) 
    select new {
        a,
        t
     }).SingleOrDefault(); //or change to .ToArray();
foreach (var client in clientInfo)
{
    var client.a.t.yourfieldname;
    //or
    var client.a.yourfieldname;
}
于 2012-08-14T19:25:13.907 回答