如果 char(2) 列的默认值为两个空格,则 Linq quote 不返回任何项目

本文关键字:Linq quote 返回 项目 任何 空格 char 默认值 如果 两个 | 更新日期: 2023-09-27 17:55:46

我有一个ProdFinSize表,上面有RangeColorModelScaleSizeRiseInseam列,Inseam列的数据类型是char(2),默认值为两个空格。

我编写了这个 SQL 查询来测试我想要的结果。

SELECT * 
FROM ProdFinSize
WHERE Range = '020' 
  and Color = '05' 
  and Model = 'JU' 
  and Scale = '1' 
  and Size = '34' 
  and Rise = 'R' 
  and inseam = '';

当我执行此操作时,它会按预期返回单个项目。

接下来,我在 ASP.NET WebAPI 中使用 LINQ to Entities 实现了同样的事情

这是我的 api 函数调用

// GET /api/inventory/stockcheck
[Route("CheckStock")]
[HttpGet]
public IHttpActionResult CheckStock(string range, string color, string model, string scale,
                                                 string size, string rise, string inseam = "")
{
    try
    {
        ProdFinSize product = null;                       
        product = berle.ProdFinSizes.Single(
            item =>
            item.Range == range &&
            item.Color == color &&
            item.Model == model &&
            item.Scale == scale &&
            item.Size == size &&                        
            item.Rise == rise &&
            item.Inseam == inseam
        );          
        // check if we found a matching product
        if (product != null)
        {                 
            // see if the item is in-stock
            var available = (product.FinSzOnHand-product.FinSzAloc-product.FinSzRlsd) > 0;
            return Ok(available.ToString());
        }
            return Ok("False");
        }           
        catch(Exception e)
        {
            return Ok(e.Message);
            //return Ok("Item not found");
         }
     }

现在,当我进行 api 调用并传递我在 SQL 查询中使用的相同值时,它会返回一条消息:Sequence Contains No Elements .

有人可以告诉我我缺少什么以及为什么 LINQ to Entities 中的相同查询没有返回单个结果?

我是 LINQ to Entities 的新手,所以我不确定我是否做错了什么。

注意:我无法更改数据库表上的任何列或列数据类型。

当我运行 SQL 事件探查器时,将执行以下查询。

exec sp_executesql N'SELECT TOP (2) 
    [Extent1].[CompanyCode] AS [CompanyCode], 
    [Extent1].[Range] AS [Range], 
    [Extent1].[Color] AS [Color], 
    [Extent1].[Model] AS [Model], 
    [Extent1].[Scale] AS [Scale], 
    [Extent1].[Inseam] AS [Inseam], 
    [Extent1].[Size] AS [Size], 
    [Extent1].[Rise] AS [Rise], 
    [Extent1].[FinSzProd] AS [FinSzProd], 
    [Extent1].[FinSzOnHand] AS [FinSzOnHand], 
    [Extent1].[FinSzXfrIn] AS [FinSzXfrIn], 
    [Extent1].[FinSzXfrOut] AS [FinSzXfrOut], 
    [Extent1].[FinSzRetn] AS [FinSzRetn], 
    [Extent1].[FinSzShip] AS [FinSzShip], 
    [Extent1].[FinSzRsrvd] AS [FinSzRsrvd], 
    [Extent1].[FinSzRlsd] AS [FinSzRlsd], 
    [Extent1].[FinSzAloc] AS [FinSzAloc], 
    [Extent1].[DateTimeStamp] AS [DateTimeStamp], 
    [Extent1].[FormID] AS [FormID], 
    [Extent1].[UserID] AS [UserID], 
    [Extent1].[rowguid] AS [rowguid]
    FROM (SELECT 
    [ProdFinSize].[CompanyCode] AS [CompanyCode], 
    [ProdFinSize].[Range] AS [Range], 
    [ProdFinSize].[Color] AS [Color], 
    [ProdFinSize].[Model] AS [Model], 
    [ProdFinSize].[Scale] AS [Scale], 
    [ProdFinSize].[Inseam] AS [Inseam], 
    [ProdFinSize].[Size] AS [Size], 
    [ProdFinSize].[Rise] AS [Rise], 
    [ProdFinSize].[FinSzProd] AS [FinSzProd], 
    [ProdFinSize].[FinSzOnHand] AS [FinSzOnHand], 
    [ProdFinSize].[FinSzXfrIn] AS [FinSzXfrIn], 
    [ProdFinSize].[FinSzXfrOut] AS [FinSzXfrOut], 
    [ProdFinSize].[FinSzRetn] AS [FinSzRetn], 
    [ProdFinSize].[FinSzShip] AS [FinSzShip], 
    [ProdFinSize].[FinSzRsrvd] AS [FinSzRsrvd], 
    [ProdFinSize].[FinSzRlsd] AS [FinSzRlsd], 
    [ProdFinSize].[FinSzAloc] AS [FinSzAloc], 
    [ProdFinSize].[DateTimeStamp] AS [DateTimeStamp], 
    [ProdFinSize].[FormID] AS [FormID], 
    [ProdFinSize].[UserID] AS [UserID], 
    [ProdFinSize].[rowguid] AS [rowguid]
    FROM [dbo].[ProdFinSize] AS [ProdFinSize]) AS [Extent1]
    WHERE ([Extent1].[Range] = @p__linq__0) AND (@p__linq__0 IS NOT NULL) AND ([Extent1].[Color] = @p__linq__1) AND (@p__linq__1 IS NOT NULL) AND ([Extent1].[Model] = @p__linq__2) AND (@p__linq__2 IS NOT NULL) AND ([Extent1].[Scale] = @p__linq__3) AND (@p__linq__3 IS NOT NULL) AND ([Extent1].[Size] = @p__linq__4) AND (@p__linq__4 IS NOT NULL) AND ([Extent1].[Rise] = @p__linq__5) AND (@p__linq__5 IS NOT NULL) AND ([Extent1].[Inseam] = @p__linq__6) AND (@p__linq__6 IS NOT NULL)',N'@p__linq__0 varchar(8000),@p__linq__1 varchar(8000),@p__linq__2 varchar(8000),@p__linq__3 varchar(8000),@p__linq__4 varchar(8000),@p__linq__5 varchar(8000),@p__linq__6 varchar(8000)',@p__linq__0='020',@p__linq__1='05',@p__linq__2='JU',@p__linq__3='1',@p__linq__4='34',@p__linq__5='R',@p__linq__6=NULL

如果 char(2) 列的默认值为两个空格,则 Linq quote 不返回任何项目

参数 inseam 的默认值是 " 而不是 " "(两个空格)