【发布时间】:2014-09-25 19:34:04
【问题描述】:
我对此进行了研究,如果重复,我深表歉意,但我似乎找不到正确的答案,我从这个网站学到了很多东西。
我有 3 张桌子:
CREATE TABLE [Reporting].[ReportingCompanies](
[ID] [int] IDENTITY(1,1) NOT NULL,
[EINC] [int] NOT NULL,
[CompanyId] [varchar](4) NOT NULL,
[CompanyName] [varchar](50) NOT NULL,
[LastClosedWeek] [datetime] NOT NULL,
[PriorWeekSales] [decimal](14, 4) NULL,
[PriorWeek] [datetime] NULL,
[CurrentWeek] [datetime] NULL,
[LastWeekSales] [decimal](14, 4) NULL,
[AgingBalance] [decimal](14, 4) NULL,
[DataAsOf] [datetime] NULL,
[Tier] [int] NULL,
[CurrentWeeklyAverage] [decimal](14, 4) NULL,
[AvgAged] [decimal](14, 4) NULL,
[hasSpread] [bit] NULL,
[DSO] [int] NULL,
[isFamily] [bit] NULL,
[ImportStatus] [bit] NULL,
[ClientStatus] [varchar](50) NULL,
CONSTRAINT [PK_ReportingCompanies] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [Reporting].[AllowedCompanies](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CustomUserProfileUserId] [uniqueidentifier] NOT NULL,
[CustomUserProfileID] [int] NOT NULL,
[ReportingCompanyID] [int] NOT NULL,
CONSTRAINT [PK_AllowedCompanies] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [Reporting].[CustomUserProfiles](
[ID] [int] IDENTITY(1,1) NOT NULL,
[ApplicationId] [uniqueidentifier] NOT NULL,
[UserId] [uniqueidentifier] NOT NULL,
[UserName] [nvarchar](256) NOT NULL,
[LoweredUserName] [nvarchar](256) NOT NULL,
[MobileAlias] [nvarchar](16) NULL,
[IsAnonymous] [bit] NOT NULL,
[LastActivityDate] [datetime] NOT NULL,
[ImportStatus] [bit] NULL,
CONSTRAINT [PK_CustomUserProfiles] PRIMARY KEY CLUSTERED
(
[UserId] ASC,
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
我现在需要使用左外连接添加第 4 个表,以便仅在不存在记录时为 VisitCount 列获取默认值 0。
CREATE TABLE [PayJot].[FavoriteClients](
[FavRowID] [int] IDENTITY(1,1) NOT NULL,
[Userid] [uniqueidentifier] NOT NULL,
[CompanyId] [int] NOT NULL,
[VisitCount] [int] NOT NULL,
CONSTRAINT [PK_FavoriteClients] PRIMARY KEY CLUSTERED
(
[FavRowID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
这是我的最新尝试,它返回错误“无法在 LINQ to Entities 查询中构造实体或复杂类型 'DALModel.FavoriteClient'”,但这正是智能感知似乎要求的 (?)
var userName = HttpContext.Current.User.Identity.Name;
var q = from c in db.ReportingCompanies1
join a in db.AllowedCompanies on new { ID = (int)c.ID } equals new { ID = a.ReportingCompanyID }
join p in db.CustomUserProfiles on new { CustomUserProfileID = a.CustomUserProfileID } equals new { CustomUserProfileID = p.ID }
join f in db.FavoriteClients on new { A = c.ID, B = p.UserId } equals new { A = f.CompanyId, B = f.Userid } into fvc
from userfavs in fvc.DefaultIfEmpty(new FavoriteClient { CompanyId = c.ID, Userid = p.UserId , VisitCount = 0 })
where
p.UserName == userName
orderby c.CompanyName
select new Clients()
{
ID = c.ID,
CompanyId = c.CompanyId,
CompanyName = c.CompanyName,
visitCount = userfavs.VisitCount
};
ObservableCollection<Clients> clientList = new ObservableCollection<Clients>(q.ToList());
我对 Linq 还很陌生,虽然我读过的所有示例都按照解释说得很有道理,但它们在实施中却惨遭失败。如果可以,请提前告知。
【问题讨论】:
-
此:
{ ID = (int)c.ID } equals new { ID = a.ReportingCompanyID }可以简化为:c.ID equals a.ReportingCompanyId您只有在加入多个列时才使用新的。 -
您是否尝试仅删除
DefaultIfEmpty参数?它不是一个正常的左连接。我没有按照你的想法去做。 -
我的理解是 DefaultIfEmpty 是我可以得到 0 而不是 NULL 的地方,但我不得不承认我只是想理解其他人的例子。
-
看看这个msdn example 请注意,您在
select语句中测试null,如果需要,您可以在那里分配一个0。
标签: c# linq entity-framework asp.net-mvc-4 linq-to-entities