Nav*_*eed 7 c# linq asp.net entity-framework-4
我正在尝试更新表中的单个记录,但是当我运行时.Firstordefault(),我得到错误:"对象引用未设置为对象的实例.",如果使用它.First(),我得到"序列不包含任何元素".
使用它的另一个地方,它的工作正常,但这次它导致错误.
这是代码:
public class AllownceDetails
{
public int ta_id{get;set;}
public int tvrid{get;set;}
public DateTime ofDate{get;set;}
public string status{get;set;}
public string userid {get;set;}
}
//Update Method
public void Update(AllownceDetails Allowncedtl)
{
var ta = (from a in ce.tbl_tvrallownce
where a.tvrid == Allowncedtl.tvrid
//error: Sequence contains no elements
select a).SingleOrDefault();
ta.status = Allowncedtl.status;
//error:Object reference not set to an instance of an object
ce.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
Dav*_*vid 20
查询不得返回任何数据.在SQL数据库上运行探查器以查看正在执行的物理查询,并尝试对数据库手动执行它以查看数据的外观.您可能必须调整查询(或数据)以获得您正在寻找的结果.
"序列不包含任何元素"基本上是LINQ的方式告诉你,你正试图从没有任何东西的列表中引用一个元素.所以调用类似.First()或.Single()无法找到的东西,因此错误.
当您将调用更改为类似.FirstOrDefault()或.SingleOrDefault()之后,它将使用该类型的"默认"值,对于引用类型,默认值为null.因此,如果您设置了某些内容null然后尝试在其上调用方法,那么您将获得object reference not set to an instance of an object.
这意味着您的查询不匹配任何内容。大概Allowncedtl.tvrid是一个与数据库中任何内容都不匹配的 ID。您不应该假设它将SingleOrDefault返回非空值。SingleOrDefault仅当您预计可能没有值时才使用- 并应对这种情况。如果找不到值表明存在错误,您应该使用Single(或者也许First)。
我们无法告诉您错误的根本原因是什么- 您应该记录您正在查找的 ID,找出您查找该ID 的原因,然后在数据库中检查它。
当list(查询)中没有元素或者有多个元素时,Single方法抛出此异常.
当列表中有多个元素时,SingleOrDefault方法会抛出异常.没有元素时返回null.
该FirstOrDefault方法在列表或NULL返回的第一个项目.没有例外.
使用它并检查引用为null
if (ta != null )
{
ta.status = Allowncedtl.status;
ce.SaveChanges()
}
Run Code Online (Sandbox Code Playgroud)
源将永远是一个对象,所以在你的情况下不用担心它.
| 归档时间: |
|
| 查看次数: |
26826 次 |
| 最近记录: |