Inner Join使用LINQ实体c#sql数据库和两个相关的表

时间:2012-08-24 14:15:45

标签: linq-to-entities

你能帮帮忙吗?

我有一个由两个表组成的数据库: TestData&核心 Table TestData有列:ID(int)Core(int)Name(NVARCHAR)等... 表Core具有列:ID(int)CoreName(Nvarchar)

我设置了一个关系,以便Testdata(testdata.Core)中的列链接到Core.CoreID,这样我就可以将所有核心类型保存在一个表中,并使用数字(int)在我的主TestData表中描述它们

我正在使用LINQ c#并希望将我的结果显示绑定到gridview,其中它显示了内部联接的等价物,这样我最终得到一个gridview结果,显示TestData表中的ID和Name列以及来自的核心表。

到目前为止,我有这个代码,它似乎工作但只有当我指定2个条件时,例如bc.CoreID和b.Core等于变量coreVar。

现在我可能会有更多的列和变量,所以我想从一开始就把这个更正确,所以必须有一个比我下面更好的方法吗?

任何帮助都将非常感谢....

protected void Page_Load(object sender, EventArgs e)
{
    coreLabel.Text = "2";
    dbLabel.Text = "5";
    widthLabel.Text = "54mm";

    int coreVar = Convert.ToInt32(coreLabel.Text);

    var gridQuery = from b in _entity.TestData
                    from bc in _entity.CoreData
                    where (bc.CoreID == (coreVar)) && (b.Core ==(coreVar))
                    select new {b.ID, bc.coreName};


    resultGrid.DataSource = gridQuery;
    resultGrid.DataBind();

}

1 个答案:

答案 0 :(得分:0)

好的,看起来您正在寻找一种动态扩展查询的方法。

var gridQuery = from b in _entity.TestData
                from bc in _entity.CoreData
                select new {b.ID, bc.coreName};

if (coreVar.HasValue)
{
   gridQuery = gridQuery.Where(bc.CoreID == coreVar.Value) 
                           && (b.Core == coreVar.value);
}
if (b.HasValue)
{
   gridQuery = gridQuery.Where(bc.B == b.Value) 
                           && (b.B == b.Value);
}
if ....

这将为每个已定义变量的查询添加AND条件,因此在定义更多条件时,结果将受到更多限制。