【发布时间】:2010-12-10 16:20:04
【问题描述】:
对于使用 LINQ to Entities 4.0 的项目,我有一个设置,我需要返回一个带有(常量)值的查询。如果我用 SQL 编码,它看起来像这样:
select 0 as ID, 'default' as Name
union
select ID, Name from X
对于这个项目,我想为 IQueryable 创建一个通用扩展方法,它接受一个常量值,返回一个带有常量值作为结果的查询。该过程不应触发枚举,因为我不希望查询触发数据库命中,除非应用程序中的其他代码实际针对查询进行枚举。
理想情况下,我希望 IQueryable 结果可连接到其他 Linq to Entities 查询并可由 L2E 提供商处理。
我尝试了几种变体,但意识到它们将触发枚举而不是添加到查询中。我最近的尝试扩展了查询而不枚举(根据需要),但返回错误:
public static IQueryable<T> Prepend<T>(
this IQueryable<T> query
, T value
)
{
return query
.Where(t => false).DefaultIfEmpty(value)
.Concat(query);
}
错误是,“无法创建‘OCEAN.Business.Pocos.ExclusionIncomeType’类型的常量值。在此上下文中仅支持原始类型(‘例如 Int32、String 和 Guid’)。”。
我尝试搜索类似的概念,包括附加一个值,但无济于事。
想法?
【问题讨论】:
-
您是否尝试过使用实际的
Union?query.Union(new[] {value})?我知道 Linq-to-SQL 不喜欢这样,但也许 Linq-to-Entities 可以处理它?
标签: entity-framework .net-4.0 linq-to-entities iqueryable