как вращать вокруг каждой записи в linq и показать, что на виду - PullRequest
0 голосов
/ 25 мая 2010

У меня есть четыре таблицы в моей базе данных, и я хочу объединить их, вернуть записи и показать это в searchController!

Мой запрос такой:

public IQueryable PerformSearch(string query)
{
    if (!string.IsNullOrEmpty(query))
    {
        var results = from tbl1 in context.Table1
                      join tbl2 in context.Table2 on tbl1.Id equals tbl2.Id
                      join tbl3 in context.Table3 on tbl2.Id equals tbl3.Id
                      join tbl4 in context.Table4 on tbl3.Id equals tbl4.Id
                      where tbl1.col2.Contains(query)
                      orderby tbl1.Count descending
                      select new
                      {
                          col1 = tbl1.Col1,
                          col1 = tbl1.Col1,
                          col1 = tbl1.Col1,
                                  .
                                  .
                                  .
                      };
        return results.AsQueryable();
    }
    else return null;
}

И этот метод вызывается в SearchController, как показано ниже:

public class SearchController : System.Web.Mvc.Controller
{
    public System.Web.Mvc.ActionResult Search(System.String query)
    {
        var search = new Search();
        ViewData["result"] = search.PerformSearch(query);
        return View("Search");
    }
}

Я не знаю, как я могу вращаться вокруг каждой записи (плюс функция intellisense), возвращенной методом PeformSeach, и показать это в поле зрения! И это хороший способ?

заранее спасибо

1 Ответ

1 голос
/ 26 мая 2010

Я бы порекомендовал для этого использовать строго типизированный View .

Прежде всего, верните объект модели из PerformSearch вместо IQueryable. Установите для этого объекта модели вид.

Как только ваш Просмотр знает, какие данные ему нужно отобразить, вы можете использовать intellisense.

public class Record
{
    public int Col1 { get; set; }
    public string Col2 { get; set; }
    ...
}

public IList<Record> PerformSearch(string query)
{
    var records = new List<Record>();

    if (!string.IsNullOrEmpty(query))
    {
        return (from tbl1 in context.Table1
                join tbl2 in context.Table2 on tbl1.Id equals tbl2.Id
                join tbl3 in context.Table3 on tbl2.Id equals tbl3.Id
                join tbl4 in context.Table4 on tbl3.Id equals tbl4.Id
                where tbl1.col2.Contains(query)
                orderby tbl1.Count descending
                select new Record
                {
                    col1 = tbl1.Col1,
                    col1 = tbl1.Col1,
                    col1 = tbl1.Col1
                }).ToList();
    }

    return records;
}

//ActionMethod
public System.Web.Mvc.ActionResult Search(System.String query)
{
    var search = new Search();
    var model = search.PerformSearch(query);
    return View(model);
}

//View
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Collections.IList<Record>>" %>

<% foreach (var record in Model) { %>
    <%= Html.Encode(record.Col1) %> --this will now give you intellisense
<% } %>
...