Linq to sql LINQ到SQL的转换
根据我将linq查询映射到域对象的方式,我会得到以下错误 成员“member”没有受支持的SQL转换 此代码导致错误:Linq to sql LINQ到SQL的转换,linq-to-sql,Linq To Sql,根据我将linq查询映射到域对象的方式,我会得到以下错误 成员“member”没有受支持的SQL转换 此代码导致错误: public IQueryable<ShippingMethod> ShippingMethods { get { return from sm in _db.ShippingMethods select new ShippingMethod( sm.ShippingMeth
public IQueryable<ShippingMethod> ShippingMethods {
get {
return from sm in _db.ShippingMethods
select new ShippingMethod(
sm.ShippingMethodID,
sm.Carrier,
sm.ServiceName,
sm.RatePerUnit,
sm.EstimatedDelivery,
sm.DaysToDeliver,
sm.BaseRate,
sm.Enabled
);
}
}
实例化对象的方式如何影响linq到sql的转换
谢谢
Ben它尝试将整个linq查询映射到SQL,包括所有方法和属性调用。唯一的例外是对象初始值设定项语法(对于匿名命名类型)和自身映射到SQL的扩展方法(
.Count()
)
简而言之:不能在Linq to SQL或实体框架中使用非默认构造函数。它尝试将整个Linq查询映射到SQL,包括所有方法和属性调用。唯一的例外是对象初始值设定项语法(对于匿名命名类型)和自身映射到SQL的扩展方法(
.Count()
)
简而言之:不能将非默认构造函数与Linq to SQL或实体框架一起使用。这里最重要的问题是,您混合了谓词和投影语义 投影后(即使用
select
),使用Where
扩展将不再安全,直到使用ToList()
、ToArray()
或类似工具将结果具体化。第二种情况恰好有效,因为投影是完全透明的-您所做的只是属性赋值,并且是对同一个类的赋值。构造函数不属于这一类;正如错误消息所说,SQL Server中没有构造函数调用的等效表示形式
你为什么要做这个投影呢?整个物业可替换为:
return _db.ShippingMethods.AsQueryable();
这里最重要的问题是混合了谓词和投影语义 投影后(即使用
select
),使用Where
扩展将不再安全,直到使用ToList()
、ToArray()
或类似工具将结果具体化。第二种情况恰好有效,因为投影是完全透明的-您所做的只是属性赋值,并且是对同一个类的赋值。构造函数不属于这一类;正如错误消息所说,SQL Server中没有构造函数调用的等效表示形式
你为什么要做这个投影呢?整个物业可替换为:
return _db.ShippingMethods.AsQueryable();
我的代码可能不清楚,但我没有使用Linq对象。因此_db.ShippingMethods返回Linq.ShippingMethod,但我正在映射到MyModel.ShippingMethod。谢谢你的解释。我的代码可能不清楚,但我没有使用Linq对象。因此_db.ShippingMethods返回Linq.ShippingMethod,但我正在映射到MyModel.ShippingMethod。谢谢你的解释。如果我需要使用构造函数,我该怎么办?例如,我需要初始化对象的状态,这是使用持久化到数据库的枚举来完成的。因此,我需要将这个值传递给构造函数。谢谢你可以有一个构造函数,只是没有一个带参数的构造函数。初始化应该在无参数(=默认)构造函数中进行。好的,但我相信在分配属性值之前,使用上面的对象初始值设定项语法初始化会命中默认构造函数。因此,如果我需要根据上面映射的属性初始化一个状态属性,我必须添加某种初始化方法,并在映射完成后调用它。如果我需要使用构造函数,我该怎么办?例如,我需要初始化对象的状态,这是使用持久化到数据库的枚举来完成的。因此,我需要将这个值传递给构造函数。谢谢你可以有一个构造函数,只是没有一个带参数的构造函数。初始化应该在无参数(=默认)构造函数中进行。好的,但我相信在分配属性值之前,使用上面的对象初始值设定项语法初始化会命中默认构造函数。因此,如果我需要根据上面映射的属性初始化一个状态属性,我必须添加一些初始化方法,并在映射完成后调用它。
return _db.ShippingMethods.AsQueryable();