我被困住了,希望那里的某个人可以踢我正确的方向。
我有一个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;
}
}
答案 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语句来检查连接表中的记录是否存在,导致按钮显示与否”,很明显,它必须在你的第一次查询后发生。