1

我是 c# 的新手,我正在构建一个包含图书馆(书籍和期刊)内容的应用程序。

我正在用 UI、BLL 和 DAL 构建一个 3 层程序。

我要做的是从组合框中获取文本并将其(最终)在我的 DAL 中转换为 Linq 到 SQL 查询。我创建了一个本地数据库并将其映射到实体框架。

我有以下代码:

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稍后将其传递给我的 dal。然后我使用同一本书搜索我的 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;

这是我的 BL 部分,它把书传给我的 DAL

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 回答