2016-05-14 8 views
0

文字列から使用するオブジェクトを取得しようとしています。どうやってやるの?プログラムは選択されたコンボボックスのテキストと検索データをMongoDBで取得する必要があります。文字列をクラスオブジェクト名に変換する方法

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

これは私が推測するようになります。私はActivator.CreateInstanceが助けるべきだと思い

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

「コレクション」の種類は何ですか? 'b.parameter'は擬似コードですか?どのようにあなたの問題に関連するコンボボックスやmongoDBですか? 質問を明確にしてください。 –

+0

b.parameterは疑似コードです。それはコンボボックスで選択されているものを表すはずです。例:コンボボックスのテキストが著者b.parameterの場合はb.Authorを表しますが、書籍のプロパティ(著者、タイトル、isbnなど)のいずれかを選択できます。 mongoDBのテキストボックスが1つだけで、すべてのフィールドで完全な検索をしたいと考えています。 –

答えて

0

:b.Authorまたはb.Titleためb.parameter置換...ここ

はマイブッククラスです。

はこのようにそれを使用してみてください:

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

これにはエラーがあります。値はnullにはできません。 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(); 

は明らかにあなたはcomparionで異なる種類を扱う、入力を検証するために多くのトリックを行う必要があり、これはあなたを始めさせるはずです。

関連する問題