为什么通过LINQ接收空?

时间:2017-04-21 05:56:37

标签: c# entity-framework linq api

为什么第2部分返回null。

奇怪的是,如果我按字符串类型搜索然后返回null,但是如果我按整数类型或bool类型搜索。然后我得到品牌对象。

第1部分

//....     OK code
                 public static Brand GetBrand(string name)
                {
                    DataContext db = new DataContext();
                    using (db)
                    {
                        Brand b = (from v in db.Brands
                                   where v.Name == name
                                   select v).FirstOrDefault();
                        return b;
                    }
                }




               [HttpGet]
               public IHttpActionResult Get(string name)
               {
                   Brand b = MobileHandler.GetBrand(name);
                   return Ok(b);
               }

第2部分

//.....   Return null
       public static List<Brand> GetBrands()
            {
                DataContext db = new DataContext();
                using (db)
                {
                    return db.Brands.ToList();
                }
            }

           [HttpGet]
           public IHttpActionResult Get(string name)
           {
               return Ok((from v in MobileHandler.GetBrands()
                          where v.Name == name
                          select v).FirstOrDefault());
           }

但是我收到以下错误:

<Brand xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/DataLayer.MobileMgt" i:nil="true"/>

1 个答案:

答案 0 :(得分:1)

我认为这是区分大小写的比较问题。您的代码适用于intsbools而不是字符串以及品牌名称为&#34; A pple&#34;不是&#34; 一个 pple&#34;

Entity Framework uses case comparison settings on the SQL server,通常设置为不区分大小写。在你的情况下然后&#34; Apple&#34;等于&#34; apple&#34;。这是第一种情况。

但.NET使用区分大小写的比较,这是第二种情况。所以&#34; apple&#34;不等于&#34; Apple&#34;。要解决此问题而不是v.Name == name使用v.Name.Equals(name, StringComparison.OrdinalIgnoreCase)