2016-05-14 58 views
0

我想從一個字符串中獲取要使用的對象。我怎樣才能做到這一點?該程序應該在MongoDB中獲取所選組合框的文本和搜索數據。如何將字符串轉換爲類對象名

string parameter = cmbSearch.Text; 
var results = collection.AsQueryable().Where(b => b.parameter.StartsWith(txtSearch.Text)); 

它應該看起來像這個我猜。 b.parameter替代b.Author或b.Title ...

這裏是我的圖書類:

class Books 
{ 
    [BsonId] 
    public string ISBN { get; set; } 
    [BsonIgnoreIfNull] 
    public string Title { get; set; } 
    [BsonIgnoreIfNull] 
    public string Author { get; set; } 
    [BsonIgnoreIfNull] 
    public string Editor { get; set; } 
    [BsonIgnoreIfNull] 
    public string Year { get; set; } 
    [BsonIgnoreIfNull] 
    public int No { get; set; } 
    [BsonIgnoreIfNull] 
    public string Publisher { get; set; } 
    [BsonIgnoreIfNull] 
    public string PageSetup { get; set; } 
    [BsonIgnoreIfNull] 
    public string OriginalLanguage { get; set; } 
    [BsonIgnoreIfNull] 
    public string Translator { get; set; } 
    [BsonIgnoreIfNull] 
    public string OriginalName { get; set; } 
    [BsonIgnoreIfNull] 
    public int Count { get; set; } 
} 
+0

'collection'的類型是什麼? b.parameter是僞代碼嗎?如何組合框或mongoDB與您的問題有關? 請嘗試澄清您的問題。 –

+0

b.parameter是一個僞代碼。它應該表示在組合框中選擇的內容。在例子中:如果combobox的文本是Author b.parameter代表b.Author,但我可以選擇其中一個Books屬性(如作者,標題,isbn等)。 我想用mongoDB中的一個文本框在所有字段中進行全面搜索。 –

回答

0

我認爲Activator.CreateInstance應該幫助。

嘗試使用這樣的:

Type elementType = Type.GetType(cmbSearch.Text); //Be careful here if elementType is null. You must provide it like this: Type.GetType("MyProject.Domain.Model." + myClassName + ", AssemblyName"); 

dynamic dO = Activator.CreateInstance(elementType); 

您可以在rextester找到示例代碼。

+0

它有一個錯誤:值不能爲空。 elementType爲null。你可以在問題的評論中找到更好的表達 –

0

您的問題可以通過反射解決 - 包含在.Net FW中的API,您可以使用它在運行時處理類的元數據。例如獲取所有屬性的名稱或獲取/設置任何屬性的值。 Read more about it from MSDN

示例代碼與有效的值初始化組合框:用戶給出

var properties = typeof(Book).GetProperties(); 
List<String> comboboxValues = properties.Select(property => property.Name).ToList(); 

後輸入:

String searchBy = "Author"; 
String searchValue = "Isaac Asimov"; 

List<Book> booksFromMongo = new List<Book>(); //TODO: Query mongo. 

PropertyInfo searchByProperty = typeof(Book).GetProperty(searchBy); 
List<Book> matches = booksFromMongo 
    .Where(book => (String) searchByProperty.GetValue(book) == searchValue) 
    .ToList(); 

顯然,你需要做更多的技巧來驗證輸入,處理在水平的研究不同類型,等等,但這應該讓你開始。