2012-12-02 3 views
1

저는 C#의 초보자이고 라이브러리 (책 및 저널)의 컨텐츠를 보유하고있는 응용 프로그램을 만들고 있습니다.사전을 linq 쿼리로 변환합니다.

UI, BLL 및 DAL로 3 단계 프로그램을 작성 중입니다.

내가하려는 것은 콤보 상자에서 텍스트를 가져 와서 DAL에서 Linq to SQL 쿼리로 변환하는 것입니다. 로컬 데이터베이스를 만들고이를 Entity 프레임 워크와 매핑했습니다.

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; 

I에 의해 검색 할 열 이름의 사전과 가치를 만드는거야 그리고 나는 BL에에게 전달 :

나는 다음과 같은 코드가

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

이제 모든 키로부터 쿼리를 생성하려고합니다. & 다음 형식의 사전 값 :

키 == 값.

더 나은 방법으로 어떻게 할 수 있습니까? 이러한 유형의 작업에 사전을 사용해야합니까?

+1

이 링크는 도움이 될 수 있습니다. [Dynamic LINQ] (http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query -library.aspx) –

+0

덕분에, 내가 만든 클래스, 내가 만든 값을 전달했지만 결국이 주셔서 감사합니다! :) –

+0

@yuvalos 문제를 해결 한 경우 해결 방법을 게시하고 동의하십시오. – emd

답변

0

내가 한 일은 내 UI에서 볼 수있는 내 데이터베이스 엔티티의 모의 업 (BookVO라고 함)을 전달하는 것입니다. 사용자가 콤보 박스에 데이터를 삽입하면 해당 데이터가 BookVO에 삽입됩니다. 그걸 내 BL로 가져 와서 나중에 내 dal에게 보냈다. 그런 다음 동일한 책을 사용하여 EF 컨텍스트를 검색합니다.

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; 
} 
:

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 논리입니다

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에 책을 전달 내 BL 부분입니다 : 내가 책을 추가 할 경우

입니다
관련 문제