【问题标题】:LINQ: How to convert from ISingleResult<T> to IQueryable<int>LINQ:如何从 ISingleResult<T> 转换为 IQueryable<int>
【发布时间】:2013-08-17 09:03:43
【问题描述】:

我已经开始将我现有的一些 LINQ to SQL 查询转换为使用存储过程的查询。但是,返回结果的格式不同,我想知道是否有一种聪明的方法可以从一种格式转换为另一种格式。

例如,我有一个 LINQ 查询,它返回一组 IQueryable 格式的整数:

public static Func<rdfsDataContext, IQueryable<int>>
              SubClasses = CompiledQuery.Compile( ( rdfsDataContext itsRdfsContext ) =>
                           itsRdfsContext.rdfs_statements.Where( s => s.predicate == kSubClassId )
                           .Select( s => s.subject ) );

使用存储过程时,再次通过 LINQ 调用,返回格式为:

 ISingleResult<SubClassesResult> subClasses = itsRdfsContext.SubClasses( kSubClassId );

其中 SubClassesResult 是一个由 LINQ 系统自动生成的类,它只包含一个属性,一个名为“Subject”的整数。

有没有什么简单的方法可以将存储过程返回的结果从这个 ISingleResult 格式转换为我之前的 IQueryable 格式?

【问题讨论】:

  • 这可能会有所帮助 - 这是一篇关于 LINQ to SQL 中表值函数的文章:weblogs.asp.net/zeeshanhirani/archive/2008/05/21/…
  • @Tim,太好了,谢谢。使用表值函数可以让我获得一个 IQueryable,然后我可以使用 Select(s => s.subject) 来获得我所追求的 IQueryable.

标签: c# linq linq-to-sql


【解决方案1】:

怎么样

 subclasses.Select(a=>a.Subject).AsQueryable();

?

【讨论】:

  • 这行得通!加上它的优点是我不需要从使用存储过程切换到表值函数。
猜你喜欢
  • 2010-11-18
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多