LINQ - 动态LINQ是否可以动态指定from子句?

时间:2009-01-31 10:05:48

标签: .net linq .net-3.5

我想构建动态linq。

但我想动态设置表(来自子句)

这可能吗?

马尔科姆

3 个答案:

答案 0 :(得分:1)

一如既往,取决于:-p

如果你想使用LINQ扩展方法或查询语法,那么no:这与IQueryable<T>紧密耦合,其中T是源类型。泛型可能是一种选择,具体取决于场景:

public IQueryable<T> Get<T>(int id) where T : SomeBaseClass
{
    return GetData<T>().Where(row=>row.SomeProp == id);
}

以上内容可以与LINQ-to-SQL一起使用,例如,使用GetTable<T>()(以及特别是手工制作的数据对象)。当然,要从字符串到泛型,你必须使用反射(MakeGenericMethod) - 所以不是微不足道的!

你能澄清这里的具体情况吗?

听起来像也许你应该在这里使用常规命令...例如,可能使用ExecuteQuery,它接受​​一个字符串命令并将数据加载到类型化对象中。 / p>

答案 1 :(得分:0)

我认为你很可能从SQL世界中获取新鲜(猜测),然后是的,你要做的第一件事是从字符串构建查询(我也想要)。但是在Linq中我们真的不喜欢字符串anyware,所以如果你可以发送表的类型来查询,而不是字符串名称,那么Linq会很高兴,并且你有编译器时间检查你的查询工作。这是一个双赢的局面:))

所以是的,给os一些例子,说明为什么你真的希望将表名作为字符串:)

答案 2 :(得分:0)

LINK不是SQL。

当然,您可以使用它来使用LINQ-To-SQL从SQL Server数据库中获取数据,但LINQ和SQL是两个非常不同的东西。

在很多情况下,它们的使用模式看起来很相似,但LINQ的优点是进行编译时类型检查和推断而不是运行时检查。你不能用SQL。