2011-12-09 26 views
1

我使用asp.net c#與webforms和我的工作與dal + bll結構。這是我的情況:ASP.net LINQ:返回其中id等於變量的項目

我有一個起始頁面有8個按鈕,當我點擊其中一個按鈕,我去了一個頁面list.aspx。

在這個頁面上,有一個從數據庫返回的數據與此LINQ代碼:

var result = (from b in dc.Businesses 
        select b).ToList(); 
    return result; 

這一切工作,因爲它應該。但是,我想這樣做,如果我點擊button1,只返回businessType「NighShop」的記錄。當我點擊button2時,只有IDName「Bar」的記錄被返回等。這將是愚蠢的,使8不同的頁面+ DAL & BLL的。

所以我想在LINQ(在DALBusiness.cs類層)應該是這樣的:

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

這variableValue可以每當用戶按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; 
} 

在theDALBusiness.cs類層,然後將其不知道var keuze。我是新來的asp.net,所以答案可能很簡單。

+0

你的例子看起來很好 - 你遇到了什麼問題? – BrokenGlass

+1

你可以發佈'Business'或'BusinessType'的實現嗎? – Yuck

+0

也許'=='運算符是比較引用?什麼是'BusinessType'屬性的類型? – Krzysztof

回答

2

試試這個。您需要將您的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; 
} 
+0

當我嘗試這樣說名稱會話不存在於這個命名空間。 –

+0

哦,我愚蠢的LINQ不在list.aspx頁面本身,它在DALBusiness.cs層。我認爲這就是爲什麼它不識別Session的原因? –

+0

修正了它!我能夠通過httpContext.Current.Session [「sessionName」] –

1

你的意思,只是比較編號的類似:

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

是的,我試過了。當我點擊一個按鈕時,例如,我聲明瞭anIdvariable =「Bar」,但是當我嘗試在LINQ中使用該變量時,它不知道該變量。 –

2

如果它不知道該變量嘗試製作方法,而不是比作 anIdVariable將這樣的工作它是同樣的事情Linq,但以更多的方法格式爲例

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

在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變量需要兩者均可訪問。希望有所幫助。

+0

在類中獲得通過會話我遵循你的推理,但BusinessTypeName來自數據處理程序行嗎? –

+0

哦,我很愚蠢的LINQ不在list.aspx頁面本身,它在DALBusiness.cs層。我想這會改變如何解決這個問題? –

+0

剛剛嘗試了列表頁面上的代碼,然後它就能正常工作。如果我們現在可以找到一種方法來讓它在DALBusiness.cs層上工作,那麼我的問題就解決了:) –

相關問題