0

我正在尝试编写一个 linq to sql 查询,并根据用户提供的输入字符串在运行时动态选择要从哪个表中选择。现在我有一个选择语句可以做到这一点,但它只是重复相同的查询三次,唯一的区别是选定的表。有点像这样:

if (input == "94")
{
    var query = from i in db.Table94
        select new MyClass(i.A, i.B, i.C);
}

if (input == "95")
{
    var query = from i in db.Table95
        select new MyClass(i.A, i.B, i.C);
}

//more conditional queries

query = query.Where(addtionalFilteringDoneHere);
DataGridView.DataSource = query;

使用条件 Where 子句很容易,但我正在为表选择寻找类似的东西。我厌倦了几件事,但它们没有用。就像是:

var query = from i in FetchTable(input)
    select new MyClass(i.A, i.B, i.C);

query = query.Where(addtionalFilteringDoneHere);

public returnType FetchTable(string input)
{
    //need help here
    return db.GetTable<conditionalTable>;
}

我不知道返回类型是什么,或者即使有办法做到这一点。是否可以?

4

1 回答 1

0

由于您尝试MyClass从不同的表创建实例,因此您遇到了创建动态查询的问题 - 这意味着您丢弃了 EF 或 LINQ-to-SQL - 或者您改为进行基本查找。

我建议进行基本查找,并建议您执行以下操作:

var fetch = new Dictionary<string, Func<Context, IQueryable<MyClass>>>()
{
    { "94", db => db.Table94.Select(i => new MyClass(i.A, i.B, i.C)) },
    { "95", db => db.Table95.Select(i => new MyClass(i.A, i.B, i.C)) },
};

这会在通用字典中创建强类型查询,您现在可以轻松地提取MyClass实例。

像这样的东西:

var query = fetch[input](db).Where(addtionalFilteringDoneHere);
DataGridView.DataSource = query;

fetch[input].Invoke(db)如果您更喜欢该语法,则可以使用。

这看起来如何作为解决方案?

于 2012-07-12T00:24:10.913 回答