LINQ 抱怨子查询返回了 1 行以上

本文关键字:返回 查询 LINQ | 更新日期: 2023-09-27 17:56:36

提取单个记录的简单代码(它是单个的,因为主键是设置为自动编号的整数):

using (var db = new DataClasses1DataContext())
{
    var record = db.Projects.Single(x => x.ProjectID == projectID);
    record.Deleted = true;
    record.DeletedByUserID = MySession.Current.UserID;
    record.DeletedOn = DateTime.Now;
    db.SubmitChanges();
}

我不确定为什么,但在某些情况下,一旦它击中db.SubmitChanges()我们就会得到一个异常,说明Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

但是当我"观看"记录时,我只取回了一条记录。 可能是什么原因造成的?

LINQ 抱怨子查询返回了 1 行以上

使用 db.Projects.First(x => x.ProjectID == projectID); 而不是 Single 可能会有所帮助。

这甚至似乎是一个常见问题:http://social.msdn.microsoft.com/Forums/en-US/afb292ca-3a61-4a60-8e18-830b92489016/method-single-not-supported-by-linq-to-entities?forum=adodotnetentityframework

解决方法,不知道是否有帮助,但它来自上面的链接:

    public static TElement Single<TElement>
      (this IQueryable<TElement> query)
{
    if (query.Count() != 1)
    {
        throw new InvalidOperationException();
    }
    return query.First();
}

// Use it like this
Product prod = (from p in db.Product
                where p.ProductID == 711
                select p).Single();

那件事

db.Projects.Single()

意味着应该 100% 只有 1 个值返回,而且有很多。

在这种情况下使用

db.Projects.FirstOrDefault()

或者最好检查您的数据或选择条件。

Enumerable.Single Method (IEnumerable)

关于这个..."但是当我'观看'唱片时,我只得到了一张唱片。这到底是什么原因造成的呢?

只需检查您的表以查看您是否有重复的条目,或者您是否以其他方式填充您的数据上下文使用 db.Projects() 来获取所有记录并检查它。