2015-12-08 60 views
1

linq有使用字符串來調用表的方法嗎?我嘗試了linq動態,但沒有找到我在找什麼。所以基本上我會說我傳遞一個參數字符串,我會用它來打電話給我表:Linq動態表

例如:

public IEnumerable<Category> SearchInTable(string table) 

var context = new MapEntities() ; 

myTable = context.Tables[table]; // something like that. Table == Country 

return myTable.Where(x => x.name.Contains("Canada")).OrderByDescending(o => o.id).Take(10); 

我希望我是清楚的!謝謝

+0

什麼是數據訪問技術你在用嗎?實體框架? –

+0

[從LINQ DataContext中的表名獲取表數據]可能的重複(http://stackoverflow.com/questions/1919632/get-table-data-from-table-name-in-linq-datacontext) –

回答

0
public IQueryable<Category> SearchInTable(string table) 
{ 
    var context = new MapEntities(); 
    IQueryable<Category> myTable; 
    switch(table) 
    { 
    case "Canada": myTable=context.Canada; break; 
    case "UnitedStates": myTable=context.UnitedStates; break; 
    else throw new Exception("Table not found"); 
    } 
    return myTable.Where(x => x.name.Contains("Canada")).OrderByDescending(o => o.id).Take(10); 
} 

雖然你應該打破這種分離:

public static IQueryable<Category> GetTable(this DataContext context,string table) 
{ 
    IQueryable<Category> myTable; 
    switch(table) 
    { 
    case "Canada": myTable=context.Canada; break; 
    case "UnitedStates": myTable=context.UnitedStates; break; 
    else throw new Exception("Table not found"); 
    } 
    return myTable; 
} 

public static IQueryable<Category> Search(this IQueryable<Category> context) 
{ 
    return context.Where(x => x.name.Contains("Canada")).OrderByDescending(o => o.id).Take(10); 
} 

,那麼你可以這樣做:

var result=new MapEntities().GetTable("Canada").Search(); 

(我可能不會放。取(10)在搜索中,我會想出一個更好的名稱,比如ContainsCanada,或者使搜索更具通用性)

+0

There's一種沒有開關箱的方式嗎?假設我將有50個具有相同結構的表格,所以我不想使用50個案例。 – user708683

+0

如果您有50個表都具有相同的結構,那麼您可能應該將它設計爲一​​個表,並將具有FK的附加列設置爲第二個表。 –

+0

出於性能方面的考慮,我更喜歡分開使用我的桌子。我不想通過所有包含50個類別的表來獲得我需要的一個。另外每個類別可以有不同的行。如果我用一張桌子快得多。例如:如果類別==國家,然後從國家表中獲得數據等 – user708683