回答
只是Cast<T>()
而已。假设它是一个相同类型的查询。否则,您可以使用OfType<T>()
过滤方法来过滤某种类型的项目。
IQueryable query = ...;
IQueryable<MyType> x = query.Cast<MyType>(); // assuming the queryable is of `MyType` objects
IQueryable<MyDerivedType> y = query.OfType<MyDerivedType>(); // filter out objects derived from `MyType` (`MyDerivedType`)
不过你的情况,你说你正在使用动态LINQ和做一个动态的投影。考虑这个完全由查询:
var query = dc.SomeTable
.Where("SomeProperty = \"foo\"")
.Select("new (SomeProperty, AnotherProperty)");
它导致IQueryable
类型的查询。你不能把这个投射到一个特定类型的查询IQueryable<T>
毕竟什么是T
? Dynamic LINQ库所做的是创建一个从DynamicCass
派生的类型。你可以投到IQueryable<DynamicClass>
(query.Cast<DynamicClass>()
),但你将无法访问属性,所以它是没有意义的。
真的,你拥有的唯一不错的选择是在这种情况下使用dynamic
来访问这些属性。
foreach (dynamic x in query)
{
string someProperty = x.SomeProperty;
int anotherProperty = x.AnotherProperty;
// etc...
}
如果你想将其转换为您的POCO对象的查询,你必须做转换为一个单独的步骤,但使用LINQ to对象。
IEnumerable<SomePoco> query =
dc.SomeTable
.Where("SomeProperty = \"foo\"")
.Select("new (SomeProperty, AnotherProperty)")
.Cast<DynamicObject>().AsEnumerable().Cast<dynamic>()
.Select(x => new SomePoco
{
SomeProperty = x.SomeProperty,
AnotherProperty = x.AnotherProperty,
});
如果您必须有IQueryable<T>
,那么您不应该首先使用动态投影。
IQueryable<SomePoco> query =
dc.SomeTable
.Where("SomeProperty = \"foo\"")
.Select(x => new SomePoco
{
SomeProperty = x.SomeProperty,
AnotherProperty = x.AnotherProperty,
});
看到如何投不工作的LINQ到实体,那么我想你必须让你的POCO对象的强类型集合唯一的选择是打破了这一点,进入一个循环。
var query = dc.SomeTable
.Where("SomeProperty = \"foo\"")
.Select("new (SomeProperty, AnotherProperty)");
var result = new List<SomePoco>();
foreach (dynamic x in query)
{
result.Add(new SomePoco
{
SomeProperty = x.SomeProperty,
AnotherProperty = x.AnotherProperty,
});
}
我得到System.Exception:不能执行类型转换.. Linq转换为实体只支持对原始类型转换.. – Alex70 2011-05-11 13:28:00
所有我需要的是实现一个IQueryable
@Alex:这是如果信息在您提问时很有用,那么在这种情况下,由于您投射到动态类型和技术上,您不能投射到特定类型,因此您不知道编译时间类型。然而,你可以强制转换为DynamicClass,因为这是对象派生的类型,除非你使用'dynamic'变量,否则你将无法直接访问这些字段。 – 2011-05-11 21:01:22
- 1. IQueryable to DataSet
- 2. IList <T> to IQueryable <T>
- 3. convert IQueryable <int> to <int>
- 4. IQueryable to non-AD LDAP
- 5. IQueryable <Entity>在LINQ与嵌套对象IQueryable <DTO>
- 6. linq to sql ExecuteQuery()as IQueryable
- 7. 如何作为IQueryable返回IQueryable <Something><ISomething>
- 8. 可能转换IQueryable <Derived>到IQueryable <Base>?
- 9. 为IQueryable分配IQueryable <int>时编译出错<object>
- 10. 变换LINQ的IQueryable为分页IQueryable的使用LINQ to NHibernate的
- 11. 返回的IQueryable <string>
- 12. IQueryable <a> to ObservableCollection <a>其中a =匿名类型
- 13. 索引IQueryable <int>?
- 14. 如何转换的IQueryable <IQueryable的<Page>>到的IQueryable <Page>使用LINQ
- 15. 的一个IQueryable <T>
- 16. IQueryable <T> and async/await
- 17. IQueryable的ValueInjecter <T>
- 18. IQueryable <T>问题
- 19. 如何将linq组IQueryable <IEnumerable <T>>更改为IQueryable <T>?
- 20. 的LINQ - 如何将IQueryable的<IEnumerable>到的IQueryable
- 21. 如何使IQueryable <out T>与指令IQueryable一起工作?
- 22. 从linq-to-sql中获得Iqueryable <T>的计数?
- 23. ObjectQuery <T>或IQueryable <T>
- 24. IQueryable <T1>将转换为IQueryable的扩展方法<T2>
- 25. IQueryable动态“WHERE IN”(LINQ to SQL)
- 26. cast iqueryable
- 27. Linq2Sql IQueryable在另一个IQueryable内
- 28. 绑定GridView到IQueryable <T>
- 29. 使用返回类型IQueryable <TABLE_1>
- 30. IQueryable评估
而你如何获得非泛型'IQueryable'? – 2011-05-11 13:08:16