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

C# 如果char(2)列的默认值为两个空格,Linq quote将不返回任何项,c#,sql,sql-server,linq-to-entities,entity-framework-4.1,C#,Sql,Sql Server,Linq To Entities,Entity Framework 4.1,我有一个ProdFinSize表,表中有范围,颜色,型号,比例,大小,上升,内接缝列,数据类型为字符(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 = ''; 当

我有一个
ProdFinSize
表,表中有
范围
颜色
型号
比例
大小
上升
内接缝
列,数据类型为
字符(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实体实现了同样的功能

这是我的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查询中使用的相同值时,它返回一条消息:
序列不包含任何元素

有人能告诉我我遗漏了什么,以及为什么LINQtoEntities中的同一个查询不会像应该的那样返回单个结果吗

我是LINQ的新手,所以我不确定自己是否做错了什么

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

当我运行SQL Profiler时,将执行下面的查询

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

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

以准确查看正在执行的查询。一条注释。。。DB通常不区分大小写。。您确定这里没有简单的大小写问题吗?您可能需要对char类型的列调用.Trim(),以确保您没有比较填充字符串。也许您也应该发布数据。。。有一些简单的不匹配的东西…看看SQL的ed:您正在传递参数赋值
@p\uu linq\uu 6=NULL
。这与
WHERE
子句中的条件
@p\u linq\u 6不为空
相冲突。您可以尝试将方法调用中“inseam”参数的默认值更改为
(两个空格)。