Umair Nafis Ответов: 1

Как linq query извлекает данные из нескольких таблиц без использования join?


I have 3 tables in my database which have no relation with each other. what i want is to implement the search operation on my website. So that when a word is submit in search box the query go through all the tables and fetch the data wherever it find that word. I can fetch the data from single table.


Please don't confuse about what i return in action method, its a very long and unnecessary code for that question.

By using this code I successfully get the search result from one table. Now I want same result from all the tables present in the database. that's where I'm stuck. I searched so many article for that but didn't find any solution that's in the last I myself asking this.

Thanks


Что я уже пробовал:

public PartialViewResult Searchpartial(string searchString)
		{

			
			var article = (from c in db.Tbl_Article select new 
                        SearchModel() { Tbl_Article = c });
			article = article.Where(s => 
                      s.Tbl_Article.Article_Title.Contains(searchString));

			var blog = (from c in db.Tbl_Blog select new SearchModel() { 
                        Tbl_Blog = c });
			blog = blog.Where(s => 
                             s.Tbl_Blog.Blog_Title.Contains(searchString));
 
			var history = (from c in db.Tbl_History select new 
                        SearchModel() { Tbl_History = c });
			history = history.Where(s => 
                          s.Tbl_History.Title.Contains(searchString));

			var result = article.Select(x => 
                            x.Tbl_Article.Article_Title).Union(blog.Select(x => 
                          x.Tbl_Blog.Blog_Title)).Union(history.Select(x => 
                              x.Tbl_History.Title)).ToList();
				

		
			


			if (result != null)
			{
				return PartialView("Searchpartial", result);
			}
			else
			{
				string res = "No Record Found";
				return PartialView("Searchpartial", res);
			}

		}



Это мое частичное представление:


        @model IEnumerable<project.Models.SearchModel>
             @using Project.Models
           <div class="col-md-8">
            	@{


		if (Model.Count() == 0)
		{<br />
			<br />
			<br />
			<div class="col-md-12">
				<p>
					Sorry! No result found
				</p>
			</div>
		}
		else
		{<br />
			<br />
			<br />
			foreach (var item in Model)
			{

				<div class="col-md-12">
					<p>

		<a href="@Url.Action("Article","ArticleView", new { id = 
                           HttpUtility.UrlEncode(new 
                      StandardModule().Encrypt(item.Tbl_Article.Id.ToString())) 
                        })">@item.Tbl_Article.Article_Title</a>
		<a  href="@Url.Action("Blog","BlogView", new { id = 
                      HttpUtility.UrlEncode(new 
                    StandardModule().Encrypt(item.Tbl_Blog.Id.ToString())) 
                              })">@item.Tbl_Blog.Blog_Title</a>
		<a href="@Url.Action("History","HistoryView", new { id = 
                      HttpUtility.UrlEncode(new 
                      StandardModule().Encrypt(item.Tbl_History.Id.ToString())) 
                      })">@item.Tbl_History.Title</a>
					</p>
				</div>
			}
		}

	}
</div>



класс моделей :

public class SearchModel
	{
		public Tbl_Article Tbl_Article { get; set; }
		public Tbl_Blog Tbl_Blog { get; set; }
		public Tbl_History Tbl_History { get; set; }	

	}

1 Ответов

Рейтинг:
0

F-ES Sitecore

Выполните поиск три раза, по одному для каждой таблицы, в которой вы хотите выполнить поиск. Если вы хотите представить один результирующий набор, то объедините три результата в один список и верните этот список.


Umair Nafis

Спасибо за ответ, сэр , я попробовал ваше предложение, но теперь я не знаю, как отобразить результат. Я имею в виду , что по вашей логике я получил окончательный результат из всей таблицы, теперь вы можете сказать мне, как отобразить этот результат в моем представлении ?

F-ES Sitecore

Вы должны составить один список результатов из трех отдельных результатов, а затем привязать свое представление к этому списку. Я не могу дать подробностей, так как не вижу вашего кода. Обновите исходный вопрос, чтобы включить в него любые изменения\новый код.

Umair Nafis

Сэр, я обновил код, пожалуйста, проверьте его.

F-ES Sitecore

Если вы посмотрите на тип "результата", то это, вероятно, List<string>, Так как вы выбираете только свойства заголовка в своем выборе, чтобы получить список строк.

Looking at your code and how you have structured SearchModel it makes no sense. It seems that you are expecting the exact same number of results from each of your three searches so you'll have three lists of, for example, 10 objects and you want a list of 10 SearchModel objects with the first SearchModel object containing a reference to the first item in each of your three separate lists, and I doubt your data is like that. If it is then you'll need to do a "for" loop looping through from 0 to n where n is the number of rows in one of your lists (it won't matter which as they are all the same size). In the for loop create a new instance of SearchModel and set

sm.Tbl_Article = article[i].Поисковая модель.Tbl_Article;
sm.Tbl_Blog = блог[i].Поисковая модель.Tbl_Blog;
sm.Tbl_History = история[i].Поисковая модель.Tbl_History;

Добавьте каждый объект "sm" в новый список SearchModel, и это даст вам данные в формате, необходимом для представления.

Но я подозреваю, что на самом деле ты хочешь чего-то другого.