2016-05-14 88 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(); 

显然,你需要做更多的技巧来验证输入,处理在水平的研究不同类型,等等,但这应该让你开始。