C# 如何转换LinqToSql表<;张力>;作为一张桌子<;积极性>;张力在哪里:张力?

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

我试图将DbLinq与SQLite数据库一起使用,但当我试图将
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)