给我对象引用不设置为一个对象的实例.当将linqtoentites转换为linqtoobjects时
本文关键字:当将 linqtoentites 转换 linqtoobjects 实例 一个对象 对象引用 设置 | 更新日期: 2023-09-27 18:15:55
我是这样做的:
我班上public class Order
{
// remove some code for brevity
public virtual Foo Foo { get; set; }
public virtual Bar Bar { get; set; }
public virtual ICollection<Knife> Knives { get; set; }
}
视图模型更新:
public class OrderVm
{
public string SomeText { get; set; }
}
in my controller
第一次尝试:这给了我Object reference not set to an instance of an object.
var tmp = _db.Orders
.Include("Foo")
.Include("Bar")
.Include("Knives")
.AsEnumerable()
.Select(o => new OrderVm
{
SomeText = o.Knives.Count().ToString() + " some text here"
});
第二次尝试:给出我错误LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.
var tmp = _db.Orders
.Include("Foo")
.Include("Bar")
.Include("Knives")
.Select(o => new OrderVm
{
SomeText = o.Knives.Count().ToString() + " some text here"
});
所以基本上,我需要的是在分配属性时执行.ToString()
(需要从int转换为string)。他们说,通过调用AsEnumerable()
(建议显示而不是ToList()
)将LinqToEntities
转换为LinqToObjects
,但是当我试图转换它时。这让我的Object reference not set to an instance of an object.
真的不知道为什么。任何想法吗?
第二个片段不是在c#代码中执行投影,而是将该代码转换为在数据库端执行的SQL代码。与您正在执行的操作相当的SQL可以在null
值上执行,并且只会传播null
,而不会使查询崩溃。
第一个查询执行c#应用程序中的代码,使用c#操作和null处理行为,即当尝试调用null
值的函数而不是传播null '时抛出异常。
如果您可以在数据库端执行投影,那么您可能应该这样做,因为它将防止您沿着网络向应用程序传递不必要的不需要的信息。如果你在c#端执行投影,你需要对其进行编码,使其能够正确处理null
值而不会崩溃。