这个linq查询(DBContext)有什么问题?

时间:2014-01-29 15:37:06

标签: c# linq entity-framework

我正在使用VS2012和DBContext(实体框架)。

以下查询引发异常

Customer cust;
using (var context = new MiniNorthwindContext()) {
    cust = (from c in context.Customers
            where c.CustomerName.Contains("SN")
            select c).SingleOrDefault();
}

当我运行它时,它会抛出以下错误:“Sequence包含多个元素”。

如果我用

替换它
Customer cust;
using (var context = new MiniNorthwindContext()) {
    cust = (from c in context.Customers
            where c.CustomerName == "SN Software"
            select c).SingleOrDefault();
}

然后它过去了。

我可能做错了什么。

3 个答案:

答案 0 :(得分:5)

SingleOrDefault可以做以下三件事之一:

  • 如果没有结果,则返回默认值;
  • 如果有一个结果;退货;
  • 如果有多个结果,则抛出该异常。

所以你的查询匹配多行。

答案 1 :(得分:1)

只要查询返回多条记录,

SingleOrDefault()就会抛出异常。如果有任何记录,您可以使用FirstOrDefault()代替第一条记录。

答案 2 :(得分:0)

两个查询都是正确的。问题是数据:

<强> CUSTOMERNAME
ESNF CO
SN软件
MICROSOFT
APPLE

第一个查询(c.CustomerName.Contains(“SN”))结果:

  • ESNF CO
  • SN SOFTWARE

返回2行,因此Exception,因为SingleOrDefault()只允许1条记录。

第二个查询( c.CustomerName ==“SN Software”)结果:

  • SN 软件

仅返回1行

运行完美!!!。

问题在于数据。