mohsenelf
شنبه 03 اسفند 1392, 14:08 عصر
سلام و وقت بخیر ! :)
من چند تا تیبل مختلف دارم ، یکی برای ناشرین ، یکی برای یوزر ها ، یکی برای کتاب ها و ...
الان برای سرچ پیشرفته نیاز دارم با کمترین کوری زدن به دیتابیس ، اطلاعات رو به دست بیارم .
فیلدهای سرچ من اینها هستن:
نام کتاب ، نام نویسنده ، فامیلی نویسنده ، نام انتشارات
و نیازه که وقتی طرف به فرض اسم انتشارات رو وارد میکنه ، من اول یه کوری بزنم به تیبل ناشران و آی دی انتشارات رو بدست بیارم و بعد روی تیبل کتاب ها ، همه ی کتاب هایی که انتشاراتشون اون باشه رو لیست کنم و ....
دیتابیس اصلی بیش از 6هزار تا کتاب داره ، و ناشرین و نویسنده ها هم زیاد هستن ! میخواستم بهترین راه رو بدونم :)
ممنون از وقتی که میذارین :)
کدی که فعلا نوشتم اینه ولی اصلن خوب نیست :
BookDataContext book = new BookDataContext(Config._Connection);
PublisherDataContext pub = new PublisherDataContext(Config._Connection);
List<Book> lst_BookName = new List<Book>();
List<Book> lst_Publisher = new List<Book>();
List<Book> lst_FName = new List<Book>();
List<Book> lst_LName = new List<Book>();
List<Book> result = new List<Book>();
if (!string.IsNullOrEmpty(txt_search_BookName.Text))
{
var books_name = (from p in book.Books where SqlMethods.Like(p.Book_Name, "%" + txt_search_BookName.Text + "%") select p).ToList();
lst_BookName = books_name;
}
if (!string.IsNullOrEmpty(txt_search_Publisher.Text))
{
var books_publisher = (from p in book.Books join p2 in pub.publishers on p.Pub_ID equals p2.Pub_ID where SqlMethods.Like(p2.Publisher_Name, "%" + txt_search_Publisher.Text + "%") select p).ToList();
lst_Publisher = books_publisher;
}
if (!string.IsNullOrEmpty(txt_search_AuthorFirstName. Text))
{
var books_AuthorFirstName = (from p in book.Authors join p2 in book.Books on p.Authror_ID equals p2.Writers[0].Authror_ID where SqlMethods.Like(p.Authror_Name, "%" + txt_search_AuthorFirstName.Text + "%") select p2).ToList();
lst_FName = books_AuthorFirstName;
}
if (!string.IsNullOrEmpty(txt_search_AuthorLastName.T ext))
{
var books_AuthorLastName = (from p in book.Authors join p2 in book.Books on p.Authror_ID equals p2.Writers[0].Authror_ID where SqlMethods.Like(p.Authror_Family, "%" + txt_search_AuthorLastName.Text + "%") select p2).ToList();
lst_LName = books_AuthorLastName;
}
بعد از اینها هم یک سری if گذاشتم که این چند تا لیست رو اگه خالی نبودن ، با همدیگه مقایسه میکنه و یکی میکنه و توی گرید ویووو نشون میده :
if (lst_BookName.Any())
{
if (lst_Publisher.Any())
{
if (lst_FName.Any())
{
if (lst_LName.Any())
{
result = lst_Publisher.Union(lst_BookName).ToList();
result = result.Union(lst_FName).ToList();
result = result.Union(lst_LName).ToList();
}
else
{
result = lst_Publisher.Union(lst_BookName).ToList();
result = result.Union(lst_FName).ToList();
}
}
else
{
result = lst_Publisher.Union(lst_BookName).ToList();
}
}
else
if (lst_FName.Any())
{
if (lst_LName.Any())
{
result = lst_BookName.Union(lst_FName).ToList();
result = result.Union(lst_LName).ToList();
}
else
{
result = lst_BookName.Union(lst_FName).ToList();
}
}
else
if (lst_LName.Any())
{
result = lst_BookName.Union(lst_LName).ToList();
}
else
{
result = lst_BookName;
}
}
else
if (lst_Publisher.Any())
{
if (lst_FName.Any())
{
if (lst_LName.Any())
{
result = lst_Publisher.Union(lst_FName).ToList();
result = result.Union(lst_LName).ToList();
}
else
{
result = lst_Publisher.Union(lst_FName).ToList();
}
}
else
if (lst_LName.Any())
{
result = lst_Publisher.Union(lst_LName).ToList();
}
else
{
result = lst_Publisher;
}
}
else
if (lst_FName.Any())
{
if (lst_LName.Any())
{
result = lst_FName.Union(lst_LName).ToList();
}
else
{
result = lst_FName;
}
}
else
if (lst_LName.Any())
{
result = lst_LName;
}
myGridView.DataSource = result;
myGridView.DataBind();
من چند تا تیبل مختلف دارم ، یکی برای ناشرین ، یکی برای یوزر ها ، یکی برای کتاب ها و ...
الان برای سرچ پیشرفته نیاز دارم با کمترین کوری زدن به دیتابیس ، اطلاعات رو به دست بیارم .
فیلدهای سرچ من اینها هستن:
نام کتاب ، نام نویسنده ، فامیلی نویسنده ، نام انتشارات
و نیازه که وقتی طرف به فرض اسم انتشارات رو وارد میکنه ، من اول یه کوری بزنم به تیبل ناشران و آی دی انتشارات رو بدست بیارم و بعد روی تیبل کتاب ها ، همه ی کتاب هایی که انتشاراتشون اون باشه رو لیست کنم و ....
دیتابیس اصلی بیش از 6هزار تا کتاب داره ، و ناشرین و نویسنده ها هم زیاد هستن ! میخواستم بهترین راه رو بدونم :)
ممنون از وقتی که میذارین :)
کدی که فعلا نوشتم اینه ولی اصلن خوب نیست :
BookDataContext book = new BookDataContext(Config._Connection);
PublisherDataContext pub = new PublisherDataContext(Config._Connection);
List<Book> lst_BookName = new List<Book>();
List<Book> lst_Publisher = new List<Book>();
List<Book> lst_FName = new List<Book>();
List<Book> lst_LName = new List<Book>();
List<Book> result = new List<Book>();
if (!string.IsNullOrEmpty(txt_search_BookName.Text))
{
var books_name = (from p in book.Books where SqlMethods.Like(p.Book_Name, "%" + txt_search_BookName.Text + "%") select p).ToList();
lst_BookName = books_name;
}
if (!string.IsNullOrEmpty(txt_search_Publisher.Text))
{
var books_publisher = (from p in book.Books join p2 in pub.publishers on p.Pub_ID equals p2.Pub_ID where SqlMethods.Like(p2.Publisher_Name, "%" + txt_search_Publisher.Text + "%") select p).ToList();
lst_Publisher = books_publisher;
}
if (!string.IsNullOrEmpty(txt_search_AuthorFirstName. Text))
{
var books_AuthorFirstName = (from p in book.Authors join p2 in book.Books on p.Authror_ID equals p2.Writers[0].Authror_ID where SqlMethods.Like(p.Authror_Name, "%" + txt_search_AuthorFirstName.Text + "%") select p2).ToList();
lst_FName = books_AuthorFirstName;
}
if (!string.IsNullOrEmpty(txt_search_AuthorLastName.T ext))
{
var books_AuthorLastName = (from p in book.Authors join p2 in book.Books on p.Authror_ID equals p2.Writers[0].Authror_ID where SqlMethods.Like(p.Authror_Family, "%" + txt_search_AuthorLastName.Text + "%") select p2).ToList();
lst_LName = books_AuthorLastName;
}
بعد از اینها هم یک سری if گذاشتم که این چند تا لیست رو اگه خالی نبودن ، با همدیگه مقایسه میکنه و یکی میکنه و توی گرید ویووو نشون میده :
if (lst_BookName.Any())
{
if (lst_Publisher.Any())
{
if (lst_FName.Any())
{
if (lst_LName.Any())
{
result = lst_Publisher.Union(lst_BookName).ToList();
result = result.Union(lst_FName).ToList();
result = result.Union(lst_LName).ToList();
}
else
{
result = lst_Publisher.Union(lst_BookName).ToList();
result = result.Union(lst_FName).ToList();
}
}
else
{
result = lst_Publisher.Union(lst_BookName).ToList();
}
}
else
if (lst_FName.Any())
{
if (lst_LName.Any())
{
result = lst_BookName.Union(lst_FName).ToList();
result = result.Union(lst_LName).ToList();
}
else
{
result = lst_BookName.Union(lst_FName).ToList();
}
}
else
if (lst_LName.Any())
{
result = lst_BookName.Union(lst_LName).ToList();
}
else
{
result = lst_BookName;
}
}
else
if (lst_Publisher.Any())
{
if (lst_FName.Any())
{
if (lst_LName.Any())
{
result = lst_Publisher.Union(lst_FName).ToList();
result = result.Union(lst_LName).ToList();
}
else
{
result = lst_Publisher.Union(lst_FName).ToList();
}
}
else
if (lst_LName.Any())
{
result = lst_Publisher.Union(lst_LName).ToList();
}
else
{
result = lst_Publisher;
}
}
else
if (lst_FName.Any())
{
if (lst_LName.Any())
{
result = lst_FName.Union(lst_LName).ToList();
}
else
{
result = lst_FName;
}
}
else
if (lst_LName.Any())
{
result = lst_LName;
}
myGridView.DataSource = result;
myGridView.DataBind();