C# Linq查询返回0个结果,但应返回1
我有一个用于存储订单信息的winforms应用程序的SQL Server Compact Edition 3.5版,但有人投诉说,在完成并提交后,细节没有显示出来,通过接收用户的数据库,我可以重现该问题,但我不明白为什么。我想弄清楚的是,为什么它们没有同步,因为其他人工作得很好,我搜索了堆栈溢出,但没有找到适合我的答案 linqpad/SSMS对我收到的数据库的结果是相同的,并作为以下查询的结果显示一行(与entity framework profiler显示的查询相同): 但是,如果我使用以下任一语句,则不会得到任何结果:C# Linq查询返回0个结果,但应返回1,c#,winforms,entity-framework-4,linq-to-entities,sql-server-ce-3.5,C#,Winforms,Entity Framework 4,Linq To Entities,Sql Server Ce 3.5,我有一个用于存储订单信息的winforms应用程序的SQL Server Compact Edition 3.5版,但有人投诉说,在完成并提交后,细节没有显示出来,通过接收用户的数据库,我可以重现该问题,但我不明白为什么。我想弄清楚的是,为什么它们没有同步,因为其他人工作得很好,我搜索了堆栈溢出,但没有找到适合我的答案 linqpad/SSMS对我收到的数据库的结果是相同的,并作为以下查询的结果显示一行(与entity framework profiler显示的查询相同): 但是,如果我使用以下
_orderDetails = ctx.OrderDetail.Where(o => o.OrderHeaderId == _order.Id).ToList();
_orderDetails = (from od in ctx.OrderDetail
where od.OrderHeaderId == _order.Id
select od).ToList();
订单标题:
-- Creating table 'OrderHeader'
CREATE TABLE [OrderHeader] (
[Id] uniqueidentifier NOT NULL,
[PONumber] nvarchar(4000) NULL,
[InternalOrderText] nvarchar(4000) NULL,
[TimeStamp] datetime NOT NULL,
[IOCTrackingNo] nvarchar(4000) NULL,
[CarrierCode] nvarchar(4000) NULL,
[HowEntered] nvarchar(4000) NOT NULL,
[MessageName] nvarchar(4000) NOT NULL,
[RepID] nvarchar(4000) NOT NULL,
[BatchID] nvarchar(4000) NOT NULL,
[Status] nvarchar(4000) NOT NULL,
[ApplicationVersion] nvarchar(4000) NOT NULL,
[CustomerAccountID] nvarchar(4000) NOT NULL,
[CustomerSubAccountID] nvarchar(4000) NOT NULL,
[SystemArrivalDate] datetime NULL,
[OrderId] int NOT NULL
);
GO
-- Creating primary key on [Id] in table 'OrderHeader'
ALTER TABLE [OrderHeader]
ADD CONSTRAINT [PK_OrderHeader]
PRIMARY KEY ([Id] );
GO
订单详情:
-- Creating table 'OrderDetail'
CREATE TABLE [OrderDetail] (
[Id] uniqueidentifier NOT NULL,
[OrderHeaderId] uniqueidentifier NOT NULL,
[Price] decimal(18,2) NOT NULL,
[Quantity] int NOT NULL,
[OverridePrice] bit NOT NULL,
[ShippingWeight] decimal(18,3) NOT NULL,
[ExtendedPrice] decimal(18,2) NOT NULL,
[OrderId] int NOT NULL,
[ProductItemNo] nvarchar(4000) NOT NULL,
[ProductItemNoTypeId] uniqueidentifier NOT NULL
);
GO
-- Creating primary key on [Id] in table 'OrderDetail'
ALTER TABLE [OrderDetail]
ADD CONSTRAINT [PK_OrderDetail]
PRIMARY KEY ([Id] );
GO
外键:
-- Creating foreign key on [OrderHeaderId] in table 'OrderDetail'
ALTER TABLE [OrderDetail]
ADD CONSTRAINT [FK_OrderDetailOrderHeader]
FOREIGN KEY ([OrderHeaderId])
REFERENCES [OrderHeader]
([Id])
ON DELETE CASCADE ON UPDATE NO ACTION;
-- Creating non-clustered index for FOREIGN KEY 'FK_OrderDetailOrderHeader'
CREATE INDEX [IX_FK_OrderDetailOrderHeader]
ON [OrderDetail]
([OrderHeaderId]);
GO
我和其他几个人无法找出链接断开的原因,因此我决定将数据库更改为
SQL CE 4.0
,因为可以使用int-identity
字段,从那以后我们就没有出现过这个问题。您是否检查了_order.Id是否是您期望的,即“eec06164-a052-4c23-9575-8fe1b80c8baa”?是的,这就是我最初通过在调试时查看订单获得Id的方式。我想我也应该发布一些代码。你能试试这个吗?其中(o=>o.OrderHeader.Id===\u order.Id.ToList();已经试过了,它隐藏在一个相当长的问题中。你有这个o.OrderHeaderId而不是o.OrderHeader.Id
-- Creating foreign key on [OrderHeaderId] in table 'OrderDetail'
ALTER TABLE [OrderDetail]
ADD CONSTRAINT [FK_OrderDetailOrderHeader]
FOREIGN KEY ([OrderHeaderId])
REFERENCES [OrderHeader]
([Id])
ON DELETE CASCADE ON UPDATE NO ACTION;
-- Creating non-clustered index for FOREIGN KEY 'FK_OrderDetailOrderHeader'
CREATE INDEX [IX_FK_OrderDetailOrderHeader]
ON [OrderDetail]
([OrderHeaderId]);
GO