2016-09-16 43 views
3

我想在LINQ查詢中傳遞一個字符串。使用字符串通過DbContext訪問表

string TableName = "db.Countries"; 

var ActualData = (from n in TableName 
          where n.Record_Instance >= 0 
          select n).OrderBy(primaryColumn); 

我的目標是:我想把查詢放在一個方法中,並在需要時調用它。基本上改變TableName並將其作爲函數調用的參數傳遞。

有沒有辦法做到這一點?

更新:
解決方法:

var TableName = db.Countries; 
     GetConditionaldata(TableName,..); 

    private object GetConditionaldata(DbSet<Country> TableName, ..) 
    { 
     var ConditionalData = (from n in TableName 
           where n.Record_Instance >= 0 
           select n).OrderBy(primaryColumn); 

     var count = ConditionalData.Count(); 
     var countries = ConditionalData.Skip(jtStartIndex).Take(jtPageSize); 
     return countries; 
    } 

但在這裏,我要再次指定DbSet<Country>作爲參數類型。如果我至少可以找到一種方法來獲得通用Dbset <>我可以將它作爲我的tableName的參數類型傳遞,那麼我的問題就可以解決。

+0

那麼就要Where子句是動態的呢? – sachin

+0

請參考以下鏈接:http://stackoverflow.com/questions/3280422/passing-a-linq-expression-as-a-string –

+0

@sachin我確實需要。 –

回答

0

假設你有一個包含相同的屬性,要執行同一查詢多個實體,那麼你可以引入一個接口:

public interface IInstanceRecord 
{ 
    int Record_Instance { get; set; } 
} 

然後將其應用到部分類的實體(或直接,如果使用代碼前):

public partial class Country : IInstanceRecord { } 
public partial class Foo : IInstanceRecord { } 
public partial class Bar : IInstanceRecord { } 

現在你可以讓你的通用方法,並添加一個約束,它運行在泛型類型必須實現IInstanceRecord

public IQueryable<T> GetConditionalData<T>(IQueryable<T> dbSet, ...) 
    where T : IInstanceRecord 
{ 
    var conditionalData = (from n in dbSet 
          where n.Record_Instance >= 0 
          select n).OrderBy(primaryColumn); 

    var count = conditionalData.Count(); 

    var filteredData = conditionalData.Skip(jtStartIndex).Take(jtPageSize); 
    return filteredData; 
} 

而且與任何DbSet<T>你想要的(或其他IQueryable<T>),只要T : IInstanceRecord稱之爲:

var filteredCountries = GetConditionalData(dbContext.Countries); 
var filteredFoos = GetConditionalData(dbContext.Foos); 
var filteredBars = GetConditionalData(dbContext.Bars); 
+0

啊.. !!已經做了。我很抱歉沒有提供詳細信息。我已經擁有了實現記錄實例{ISyncInstance}的接口的所有實體類。我想要的是我有不同的實體類與每個不同的屬性。現在我正在爲所有這些實體執行查詢。我想爲我正在執行的3種不同類型的查詢創建方法,並在我需要時調用方法。 - 我現有的代碼設計非常冗長和凌亂,但工作正常,只是想修改它。 –

+1

你可以在那裏應用相同的模式。同樣,如果您需要靜態類型查詢,則需要在編譯時提供類型信息。沒有辦法繞過它。 – CodeCaster

+0

這就是我想知道的。謝謝:) –