我想构建动态linq。
但是我想动态设置表(from子句)。
这个可能吗?
马尔科姆
一如既往,这取决于情况;-p
如果您想使用LINQ扩展方法或查询语法,则不行:这与IQueryable<T>
紧密耦合,其中T
是源类型。根据情况,泛型可能是一个选项:
public IQueryable<T> Get<T>(int id) where T : SomeBaseClass
{
return GetData<T>().Where(row=>row.SomeProp == id);
}
GetTable<T>()
(以及特别手工制作的数据对象)与LINQ-to-SQL一起使用。当然,要从字符串转换为泛型,您必须使用反射(MakeGenericMethod
)-因此并不是简单的事情!我觉得你可能是从SQL世界刚刚入门(猜想),那么,你想做的第一件事就是从字符串中构建查询(我也想这样)。但是在Linq中,我们真的不喜欢任何地方都有字符串,所以如果你能以某种方式将要查询的表的类型发送给Linq,而不是字符串名称,那么Linq就会很开心,并且你可以在编译时检查查询是否有效。这是一个双赢的局面:)
所以,是的,请给我们一些例子,说明为什么你真的希望表名作为字符串:)
LINK 不是 SQL。
当然,你可以使用 LINQ-To-SQL 从 SQL Server 数据库中获取数据,但是 LINQ 和 SQL 是两个非常不同的东西。
在很多情况下,它们的使用模式看起来很像,但是 LINQ 的优点是具有编译时类型检查和推断,而不是运行时检查。你无法在 SQL 中做到这一点。