1

私はc#の初心者であり、ライブラリ(Books and Journals)のコンテンツを保持するアプリケーションを構築しています。

UI、BLL、DALを使用して3層プログラムを構築しています。

私がやろうとしているのは、コンボボックスからテキストを取得し、それを(最終的には)DALでLinqtoSQLクエリに変換することです。ローカルデータベースを作成し、EntityFrameworkでマッピングしました。

私は次のコードを持っています:

BL.MainLogic BLL = new MainLogic();
Dictionary<string, string> searchList = new Dictionary<string, string>();
searchList.Add("ItemID", cmboBxItemID.Text);
searchList.Add("ItemName", cmboBxItemName.Text);
searchList.Add("ItemType", cmboBxItemType.Text);
searchList.Add("Author", cmboBxAuthor.Text);
searchList.Add("Publisher", cmboBxPublisher.Text);
searchList.Add("Price", cmboBxPrice.Text);
DataTable searchResult = BLL.Search(searchList);
searchGridView.DataSource = searchList;

検索する列名と値を使用して辞書を作成し、それをBLに渡します。

public DataTable Search(Dictionary<string,string> SearchParams)
{
    var itemType = SearchParams.FirstOrDefault(x => x.Key == "ItemType");
    IQueryable query = SearchParams.AsQueryable();
}

今私がやろうとしているのは、辞書内のすべてのキーと値から次の形式でクエリを作成することです。

キー==値。

どうすればもっと良い方法でそれを行うことができますか?このタイプのアクションには辞書を使用する必要がありますか?

4

1 に答える 1

0

私がやったことは、UIが表示できるデータベースエンティティのモックアップ(BookVOと呼ばれる)の作成に合格したことです。ユーザーがコンボボックスにデータを挿入すると、そのデータがBookVOに挿入され、BLに渡されます。それは後で私のダルに渡されます。次に、同じ本を使用してEFコンテキストを検索します。

これは私が本を追加するところです:

private BookVO AddNewBook()
{
    BookVO bookToAdd = new BookVO()
    {
        Author = txtBxBookAuthor.Text,
        Discount = double.Parse(txtBxBookDiscount.Text),
        Genre = txtBxBookGenre.Text,
        ISBN = txtBxBookISBN.Text,
        Name = txtBxBookName.Text,
        Price = double.Parse(txtBxBookPrice.Text),
        Publisher = txtBxBookPublisher.Text,
        ReleaseDate = DateTime.Parse(dateTimeBookPicker.Text)
    };
    return bookToAdd;

これは私のDALに本を渡す私のBL部分です

public List<BookVO> SearchBook(BookVO book)
{
    List<Books> queryResult = BLDAL.SelectBookFromDB(book);
    List<BookVO> returnedBook = new List<BookVO>();
    foreach (Books dBBook in queryResult)
    {
        BookVO thisBook = new BookVO() {Author = dBBook.Author, Name = dBBook.Name, ISBN = dBBook.BookISBN, Discount = dBBook.Discount, Price = dBBook.Price, Publisher = dBBook.Publisher, ReleaseDate = dBBook.ReleaseDate};
        returnedBook.Add(thisBook);
    };
    return returnedBook;
}

これは検索用の私のDALロジックです:

public List<Books> SelectBookFromDB(BookVO book)
{
    var result = myEntities.Books.ToList();
    if (string.IsNullOrWhiteSpace(book.Author) == false)
    {
        result = result.Where(x => x.Author == book.Author).ToList();
    }
    if (string.IsNullOrWhiteSpace(book.Name) == false)
    {
        result = result.Where(x => x.Name == book.Name).ToList();
    }
    if (string.IsNullOrWhiteSpace(book.Publisher) == false)
    {
        result = result.Where(x => x.Publisher == book.Publisher).ToList();
    }
    if (string.IsNullOrWhiteSpace(book.ISBN) == false)
    {
        result = result.Where(x => x.BookISBN == book.ISBN).ToList();
    }
    if (book.Price != 0)
    {
        result = result.Where(x => x.Price == book.Price).ToList();
    }
    if (book.Discount != 0)
    {
        result = result.Where(x => x.Discount == book.Discount).ToList();
    }

    return result;
}
于 2012-12-06T08:00:51.657 に答える