2010-12-07 90 views
2

嘿,我正在製作一個簡單的搜索機器,通過2個表中的許多不同的coloumns。c動態LINQ#

我試圖讓它變成動態的。

我這樣說的:

Is there a pattern using Linq to dynamically create a filter?

這恐怕是真的可以爲我做的伎倆..它只是在VB中,我需要在C#

這裏是我的代碼:

private void displayWith1Criteria(string column, string value) 
{ 
    Console.WriteLine("entering _1_ display method"); 
    dbcontent = new DBtestEntities(); 
    var studienummerQuery = from members in dbcontent.Medlemmer.Include("Retninger") 
          where column == value 
          orderby members.Fornavn 
          select new { Studienr = members.Studienummer, Fornavn = members.Fornavn, Efternavn = members.Efternavn, Email = members.Email, Studiested = members.Studiested, Betaling = members.BetalingsType, Uddannelses_Retning = members.Retninger.retningNavn }; 

    dataGridView1.DataSource = studienummerQuery; 
} 

不返回在所有的任何數據...

列被稱爲與members.Fornavn(Fornavn - 列名)

值=安德斯(在Fornavn列中的數據的之一)

我想要做什麼: 我的數據庫使用裝入dbcontent來自ABO實體類的.edmx文件。我的數據庫由2張表格「Retninger」和「Medlemmer」組成。 Medlemmer包含像Fornavn(英文,名字),Efternavn(姓氏),Studienummer(學習編號)列的東西 我想要的是一種「動態」方法,可以設置要搜索的列和值需要在設置列中搜索。

+1

我認爲你需要看看你「其中」條款,你比較兩個輸入參數,這我不不認爲是你的意圖?現在,返回數據的唯一時間是方法被調用並通過等於'column'和'value'值並且'Include'有數據。 – 2010-12-07 16:55:32

+0

你需要動態查詢哪部分內容? – mcass20 2010-12-07 16:56:14

+0

好吧,我有我的數據庫表中的12 coloumns。 – 2010-12-07 17:41:48

回答

2

當你能表達column == value可能返回true?只有當string.Equals("Fornavn", "Anders")爲真時。

做動態LINQ很難。通常是這樣來做:

... 
where (!useMycolumn1 || member.mycolumn1 == value1) 
    &&(!useMycolumn2 || member.mycolumn2 == value2) 
    &&(!useMycolumn3 || member.mycolumn3 == value3) 
... 

useMycolumn *是設置爲true或false,這取決於某些條件是否應該被測試或一個本地布爾變量。這樣,查詢中未使用的部分就會在編譯時被優化。

0

你是否記得在網格上調用DataBind()方法?你怎麼知道什麼都沒有被返回?

0

我認爲它是因爲LINQ查詢的懶惰評估。 您可以嘗試使用.ToList,如下:

dataGridView1.DataSource = studienummerQuery.ToList(); 

也.DataBind(),如果相關的對象。

編輯:

懶惰的評價:這Link,將作爲一個良好的開端