C# 如何转换LinqToSql表<;张力>;作为一张桌子<;积极性>;张力在哪里:张力?
我试图将DbLinq与SQLite数据库一起使用,但当我试图将C# 如何转换LinqToSql表<;张力>;作为一张桌子<;积极性>;张力在哪里:张力?,c#,linq-to-sql,generics,dblinq,C#,Linq To Sql,Generics,Dblinq,我试图将DbLinq与SQLite数据库一起使用,但当我试图将ITable转换为Queryable时遇到了一个问题 DbLinq()中有一个已知的bug,这可能是我的问题的根源,但我想确保我的代码是正确的,如果是正确的,我想知道我是否可以做些什么来解决这个bug 以下是尝试执行强制转换的通用存储库方法: public IQueryable<TEntity> GetAll() { return Table.Cast<TEntity>(); // Table is a
ITable
转换为Queryable
时遇到了一个问题
DbLinq()中有一个已知的bug,这可能是我的问题的根源,但我想确保我的代码是正确的,如果是正确的,我想知道我是否可以做些什么来解决这个bug
以下是尝试执行强制转换的通用存储库方法:
public IQueryable<TEntity> GetAll()
{
return Table.Cast<TEntity>(); // Table is an ITable
}
这允许我将我的表
属性存储为表
,而不是ITable
,后者允许我使用AsEnumerable()
(如Stephen所建议的)。以下是修订后的方法:
public IEnumerable<TEntityBase> GetAll()
{
return Table.AsEnumerable().Select(e => (TEntityBase)e);
}
public IEnumerable GetAll()
{
return Table.AsEnumerable().Select(e=>(TEntityBase)e);
}
到目前为止,这似乎起到了作用。这听起来像是一个bug,但要理解实现LINQ提供程序是一项绝对艰巨的工作。即使是(微软的)LINQ-to-SQL和LINQ-to-Entities也对其支持或不支持的LINQ查询/操作有自己的限制
如果返回
IEnumerable
是可以接受的,那么您可以通过在调用Cast
之前调用AsEnumerable
来解决缺少对Queryable.Cast
支持的问题。但是,这限制了DAL的使用方式:由于不再返回IQueryable
,进一步的查询(例如Where
子句)将不会传递到DB层。我同意这听起来像个bug。你可以试试下面的方法,也可以做同样的事情
return Table.Select<TEntity>(tbl => (TEntity)tbl)
返回表。选择(tbl=>(tenty)tbl)
您可能还需要在方法定义中添加where:ITable。谢谢,Stephen!我认为返回IEnumerable对于我来说是可以接受的,但是我没有在我的
ITable
对象上看到名为AsEnumerable()
的方法或扩展。我会错过一个名称空间引用吗?谢谢,本。唉,和斯蒂芬的回答一样的问题<代码>选择()。
return Table.Select<TEntity>(tbl => (TEntity)tbl)