0

我有一个SQL Server精简版版本3.5用于存储订单信息的Winforms应用程序,但我有一个谁有问题的详细信息在它完成并提交后没有显示出来,并且通过接收用户的数据库我可以重现问题,但我无法弄清楚原因。我试图弄清楚的是为什么他们没有同步,因为其他人确实工作得很好,我搜索了Stack Overflow,没有找到适合我的答案。Linq查询返回0结果,但应返回1

linqpad结果赞成/反对我收到的数据库SSMS是相同的,并带来了一排为下面的查询(查询相同的实体框架探查节目)的结果:

SELECT [Extent1].[Id]     AS [Id], 
     [Extent1].[OrderHeaderId]  AS [OrderHeaderId], 
     [Extent1].[Price]    AS [Price], 
     [Extent1].[Quantity]   AS [Quantity], 
     [Extent1].[OverridePrice]  AS [OverridePrice], 
     [Extent1].[ShippingWeight]  AS [ShippingWeight], 
     [Extent1].[ExtendedPrice]  AS [ExtendedPrice], 
     [Extent1].[OrderId]    AS [OrderId], 
     [Extent1].[ProductItemNo]  AS [ProductItemNo], 
     [Extent1].[ProductItemNoTypeId] AS [ProductItemNoTypeId] 
FROM [OrderDetail] AS [Extent1] 
WHERE [Extent1].[OrderHeaderId] = 'eec06164-a052-4c23-9575-8fe1b80c8baa' /* @p__linq__0 */ 

但是,如果我使用以下的语句我没有得到任何结果:

_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 
+1

你是否检查_order.Id是否是你期望的那样是'eec06164-a052-4c23-9575-8fe1b80c8baa'? – neo

+0

是的,我做过了,这就是我最初得到的ID是在调试时查看订单的。猜猜我也应该发布一些代码。 – Charles380

+0

你可以试试这个吗? ctx.OrderDetail.Where(o => o.OrderHeader.Id == _order.Id).ToList(); – neo

回答

0

我和其他几个人没能弄清楚为什么链接变得坏了,所以我决定将数据库更改为SQL CE 4.0因为能够使用int identity字段,并且自此以后我们就没有这个问题了。