使用if语句将两个表连接起来

时间:2014-04-30 21:05:07

标签: c# sql sql-server linq webforms

我被困住了,希望那里的某个人可以踢我正确的方向。

我有一个ListView我已经从单个db-table循环出数据,使用模型绑定来执行此操作(Web表单项目btw)。到现在为止还挺好。现在我需要检查另一个表中的某些值,以修改被环绕的对象的外观。基本上我想要做的是,我的ListView中有2个按钮,如果我要加入的表中的记录存在,其中一个按钮应该得到visible = false属性。

所以我一直试图写一个LINQ查询来做到这一点,到目前为止没有太大的成功。

我撰写的查询示例

var query2 = from l in myContext.Table1
                             join p in myContext.Table1.Where(p => p.pID == 1)
                             on l.pID equals p.pID
                             where l.UserId == 1

这只返回我加入的表中存在的记录,我想要显示Table1中的所有记录 - 然后运行某种if语句来检查连接表中的记录是否存在,导致按钮显示与否。

更多信息,我使用SelectMethod返回IQueryable

此外,由于使用模型绑定,我是否需要为此连接对象声明一个新类,或者是否有更简单的方法(因为这只会在整个站点上使用一次)。

提前感谢任何提示或帮助!

更新

使用ListView来循环我的数据

Default.aspx的

    <asp:ListView ID="MyListView" runat="server" ItemType="Project.Models.Object" SelectMethod="MyListView_GetData">
        <ItemTemplate>
<!-- HERE i want to either add a button, or don't -->
        </ItemTemplate>
    </asp:ListView>

Default.aspx.cs

public IQueryable<Project.Models.Object> MyListView_GetData()
        {
            try
            {
                int qs2 = 2;
                var user = User.Identity.GetUserId().ToString();

                var query = from p in myContext.Object.Where(p => p.pID== qs2)
                            select p;

                foreach (var item in query)
                {
                    var doesExist = myContext.Object2.Any(m => m.eID == item.eID);

                    if (doesExist)
                    {
                        // Need to do something here?
                    }
                }

                return query.OrderByDescending(item => item.eID);
            }
            catch (Exception)
            {
                ModelState.AddModelError("", "Desc.");
                return null;
            }
        }

1 个答案:

答案 0 :(得分:0)

您可以使用Any()检查记录是否存在。因此,如果您想检查UserId为99的记录是否存在,您可以这样做:

var doesExist = myContext.Table2.Any(m => m.UserId == 99);

返回一个bool。您可以轻松使用该bool设置按钮

button.Visible = !doesExist;

编辑您的评论:

完成第一个查询后,继续确定记录是否存在,然后使用结果切换按钮的可见性。

例如,如果您有一些名为DoWork的方法来执行并填充您的列表框:

void DoWork() {
    ... execute your first query
    ... populate your listbox

    var doesExist = myContext.Table2.Any(m => m.UserId == 99);
    yourButton.Visible = !doesExist;
}

我无法确切地说你应该在没有看到其余代码的情况下把它放在哪里。但是,既然你提到过,“我想要显示Table1中的所有记录 - 之后运行某种if语句来检查连接表中的记录是否存在,导致按钮显示与否”,很明显,它必须在你的第一次查询后发生。