C# 使用变量名在linq中查询表

C# 使用变量名在linq中查询表,c#,entity-framework,linq,C#,Entity Framework,Linq,我想知道在linq中使用变量是否可以查询db集 首先,我查询数据库以获取表名作为字符串,我想将其转换为表名: public static string getTableName() { string tableName = string.Empty; var department= "Sales"; using (var context = new ALLDBEntities()) { ta

我想知道在linq中使用变量是否可以查询db集

首先,我查询数据库以获取表名作为字符串,我想将其转换为表名:

    public static string getTableName()
    {
        string tableName = string.Empty;
        var department= "Sales";

        using (var context = new ALLDBEntities())
        {
            tableName = (from x in context.PROCESS_MATRIX
                where x.AREA.Equals(product)
                select x.ENTITY).FirstOrDefault();
        }

        return tableName;
    }
现在我将我的表名作为字符串,我希望能够使用它来编写linq查询,但不是使用
alldbEntities.sales
,而是使用
table
。这样做的原因是因为我需要编写多个查询来执行相同的操作,因为我必须查询不同的表

有没有办法做到这一点

    public List<sales> GetData(DateTime startDate, DateTime endDate)
    {
        var table = getTableName();

        this.startDate = startDate.AddDays(-1);
        this.endDate = endDate.AddDays(1);

        using (var alldbEntities = new ALLDBEntities())
        {
            salesinfo = alldbEntities.sales.Where(f => f.Date >= this.startDate && f.Date <= this.endDate).ToList();
        }

        return salesinfo;
    }
公共列表GetData(日期时间开始日期、日期时间结束日期) { var table=getTableName(); this.startDate=startDate.AddDays(-1); this.endDate=endDate.AddDays(1); 使用(var alldbEntities=new alldbEntities()) { salesinfo=alldbEntities.sales.Where(f=>f.Date>=this.startDate&&f.Date这是您的:

你可以做的事情:

动态表达式API是通过使用(导入)System.Linq.Dynamic命名空间引入范围的。下面是将动态表达式API应用于Linq to SQL数据源的示例

记住尝试innerIt和outerIt

如何使用outerIt的示例

static void Main(string[] args)
{
    var claims = new List<Claim>();
    claims.Add(new Claim { Balance = 100, Tags = new List<string> { "Blah", "Blah Blah" } });
    claims.Add(new Claim { Balance = 500, Tags = new List<string> { "Dummy Tag", "Dummy tag 1" } });

    // tags to be searched for
    var tags = new List<string> { "New", "Blah" };
    var parameters = new List<object>();
    parameters.Add(tags);

    var query = claims.AsQueryable().Where("Tags.Any(@0.Contains(outerIt)) AND Balance > 100", parameters.ToArray());
}

public class Claim
{
    public decimal? Balance { get; set; }
    public List<string> Tags { get; set; }
}
static void Main(字符串[]args)
{
var索赔=新列表();
添加(新的索赔{Balance=100,Tags=newlist{“Blah”,“Blah Blah”});
添加(新的索赔{Balance=500,Tags=newlist{“虚拟标签”,“虚拟标签1”});
//要搜索的标签
var tags=新列表{“new”,“Blah”};
var参数=新列表();
参数。添加(标签);
var query=claims.AsQueryable()。其中(“Tags.Any(@0.Contains(outerIt))和Balance>100”,parameters.ToArray());
}
公共类索赔
{
公共十进制?余额{get;set;}
公共列表标记{get;set;}
}

我想使用它来编写linq查询?
linq只指列表和表,而不是数据库本身的表名。仅仅因为您希望某些内容是可变的,并不一定意味着您需要使用
字符串来执行此操作。您是否愿意接受使源表变为可变的解决方案,不使用字符串?@flater是的,我对其他解决方案持开放态度,这是我设想的方式,但它不起作用,可能只有外部链接的答案重复不是好答案。链接可能会被拒绝。直接将相关信息添加到您的答案中,以避免将来出现质量问题。我刚刚更新了我的a谢谢你的重播
static void Main(string[] args)
{
    var claims = new List<Claim>();
    claims.Add(new Claim { Balance = 100, Tags = new List<string> { "Blah", "Blah Blah" } });
    claims.Add(new Claim { Balance = 500, Tags = new List<string> { "Dummy Tag", "Dummy tag 1" } });

    // tags to be searched for
    var tags = new List<string> { "New", "Blah" };
    var parameters = new List<object>();
    parameters.Add(tags);

    var query = claims.AsQueryable().Where("Tags.Any(@0.Contains(outerIt)) AND Balance > 100", parameters.ToArray());
}

public class Claim
{
    public decimal? Balance { get; set; }
    public List<string> Tags { get; set; }
}