C# ASP.net LINQ:返回id等于变量的项

C# ASP.net LINQ:返回id等于变量的项,c#,asp.net,linq,C#,Asp.net,Linq,我将asp.NETC与webforms结合使用,并使用dal+bll结构。这就是我的情况: 我有一个有8个按钮的起始页,当我点击其中一个按钮时,我会进入一个page list.aspx 在此页面上,有使用以下LINQ代码从数据库返回的数据: var result = (from b in dc.Businesses select b).ToList(); return result; 这一切都是正常的。但是,我想这样做,如果我点击按钮1,只返

我将asp.NETC与webforms结合使用,并使用dal+bll结构。这就是我的情况:

我有一个有8个按钮的起始页,当我点击其中一个按钮时,我会进入一个page list.aspx

在此页面上,有使用以下LINQ代码从数据库返回的数据:

    var result = (from b in dc.Businesses
                  select b).ToList();
    return result;
这一切都是正常的。但是,我想这样做,如果我点击按钮1,只返回带有businessType NighShop的记录。当我点击按钮2时,只返回带有idName条的记录,等等。为这个做8个不同的页面+DAL&BLL是愚蠢的

因此,我认为DALBusiness.cs类层中的LINQ应该是这样的:

    var result = (from b in dc.Businesses where b.BusinessType == aVariableValue
                  select b).ToList();
    return result;
只要用户按下8个按钮中的一个,这个可变值就可以改变。但是我没有这方面的经验,所以我不知道怎么做

当我按下索引页上的按钮时,我试图声明var:

public void Button1_Click(object sender, EventArgs e)
{
    var keuze = "Nachtwinkel";
}
但如果我尝试:

public IList<Business> selectAll()
{
    var result = (from b in dc.Businesses where b.BusinessType == keuze
                  select b).ToList();
    return result;
}

在dalbusiness.cs类层上,它不知道var keuze。我是asp.net新手,所以答案可能很简单。

您的意思是只比较Id,比如:

var result = (from b in dc.Businesses where b.BusinessType.Id == anIdVariable
              select b).ToList();
return result;

你的意思是只是比较Id,比如:

var result = (from b in dc.Businesses where b.BusinessType.Id == anIdVariable
              select b).ToList();
return result;

如果它不知道该变量,请尝试创建一个与 anIdVariable将像这样工作它与Linq一样,但更多的是一种方法格式,只是作为一个例子

public bool FilterByBusinessTypeID(dc.Business dcBusiness)
{
   return dcBusiness.ID == anIdVariable;
}
var result= BusinessType.Where(FilterByBusinessTypeID).First(); 

如果它不知道该变量,请尝试创建一个与 anIdVariable将像这样工作它与Linq一样,但更多的是一种方法格式,只是作为一个例子

public bool FilterByBusinessTypeID(dc.Business dcBusiness)
{
   return dcBusiness.ID == anIdVariable;
}
var result= BusinessType.Where(FilterByBusinessTypeID).First(); 

试试这个。您需要将Keuze值存储在SelecAll可以访问的位置

public void Button1_Click(object sender, EventArgs e)
{
     Session["keuze"] = "Nachtwinkel";
}

public IList<Business> selectAll()
{
    var result = (from b in dc.Businesses where b.BusinessType == Session["keuze"]
                  select b).ToList();
    return result;
}

试试这个。您需要将Keuze值存储在SelecAll可以访问的位置

public void Button1_Click(object sender, EventArgs e)
{
     Session["keuze"] = "Nachtwinkel";
}

public IList<Business> selectAll()
{
    var result = (from b in dc.Businesses where b.BusinessType == Session["keuze"]
                  select b).ToList();
    return result;
}

在LINQ查询中,它将按类型计算引用。如果指定b.BusinessType==x,并且您有一个类型或实体BusinessType,则需要传递对象引用,即x必须是类型化BusinessType。您可以通过执行以下操作来解决此问题:

//this line in your OnClick function
keuze = "MyBusinessTypeName";

//this line in your data handler
var result = (from b in dc.Businesses where b.BusinessType.BusinessTypeName == keuze
              select b).ToList();

正如Erix所说,keuze变量需要对两者都可访问。希望能有所帮助。

在LINQ查询中,它将按键入的方式计算引用。如果指定b.BusinessType==x,并且您有一个类型或实体BusinessType,则需要传递对象引用,即x必须是类型化BusinessType。您可以通过执行以下操作来解决此问题:

//this line in your OnClick function
keuze = "MyBusinessTypeName";

//this line in your data handler
var result = (from b in dc.Businesses where b.BusinessType.BusinessTypeName == keuze
              select b).ToList();


正如Erix所说,keuze变量需要对两者都可访问。希望这能有所帮助。

您的示例看起来不错-您遇到了什么问题?能否发布Business或BusinessType的实现?可能==运算符正在比较引用?BusinessType属性的类型是什么?我扩展了originak post,希望它能有所帮助。您的示例看起来不错-您遇到了什么问题?您可以发布Business或BusinessType的实现吗?可能==运算符正在比较引用?什么是BusinessType属性?我扩展了originak post,我希望它能有所帮助。是的,我试过了。例如,当我点击一个按钮时,我声明anIdvariable=Bar,但当我尝试在LINQ中使用该变量时,它不知道该变量。是的,我试过了。例如,当我点击一个按钮时,我声明anIdvariable=Bar,但当我尝试在LINQ中使用该变量时,它不知道该变量。当我尝试此操作时,它表示名称会话不存在于此命名空间中。哦,我已经知道LINQ本身不在list.aspx页面上,它在DALBusiness.cs层中。我想这就是为什么它不能识别会话?修复了!我能够通过httpContext.Current.session[sessionName]类中的会话。当我尝试此操作时,它表示名称会话不存在于此命名空间中。噢,我很愚蠢,LINQ本身不在list.aspx页面上,它在DALBusiness.cs层中。我想这就是为什么它不能识别会话?修复了!我能够在一个使用httpContext.Current.session[sessionName]的类中完成会话,我遵循您的推理,但是BusinessTypeName在数据处理程序行中从何而来?哦,我很愚蠢LINQ不在list.aspx页面本身,它在DALBusiness.cs层。我想这会改变如何解决这个问题?只是尝试了listpage上的代码,然后它就工作了。如果我们现在能找到一种方法使它在DALBusiness.cs层上工作,那么我的问题就解决了:我遵循你的推理,但是BusinessTypeName在数据处理程序行中来自哪里?哦,我很愚蠢LINQ不在list.aspx页面本身,它在DALBusiness.cs层。我想这会改变如何解决这个问题?只是尝试了listpage上的代码,然后它就工作了。如果我们现在能找到一种方法使其在DALBusiness.cs层上也能工作,那么我的问题就解决了: