У меня есть приложение MVC 3, работающее с базой данных MS SQL 2008 с таблицей с именем Documents.Документы разбиты по абзацам в базе данных.Таблица документов имеет столбец DocText, содержащий текст каждого абзаца, столбец DocTitle, содержащий заголовок документа.В приложении MVC 3 есть функция поиска, которая может искать слово или фразу в столбце DocText или в столбце DocTitle.Все работает отлично, за исключением того, что если в конкретном документе искомое слово появляется в нескольких абзацах, мой список возвращает несколько экземпляров этого документа.Например, если пользователь выполняет поиск по слову «Бюджет», а в одном из документов слово «бюджет» находится в четырех разных абзацах, мой возвращенный список содержит этот документ четыре раза.
Чего я хочу добиться - перечислить каждый документ, в котором есть искомое слово.Я хочу перечислить документ по названию только один раз, независимо от того, сколько раз искомое слово появляется в этом документе.Единственный действительно уникальный столбец - это столбец RecordID, первичный ключ.
Мой контроллер:
public class SearchController : Controller
{
private GUICEEntities4 db = new GUICEEntities4();
//
// GET: /Search/
public ActionResult Index(string Keyword)
{
#region Keyword Search
if (!String.IsNullOrEmpty(Keyword)) {
var SearchDoc = db.Documents.Where(r => r.DocText.ToUpper().Contains(Keyword.ToUpper()) || r.Title.ToUpper().Contains(Keyword.ToUpper()) || r.DocNum.ToUpper().Contains(Keyword.ToUpper()));
ViewBag.CurrentKeyword = String.IsNullOrEmpty(Keyword) ? "" : Keyword;
return View(SearchDoc.ToList());
}
else{
return View();
}
#endregion
}
}
My View имеет следующее:
@foreach (var item in Model) {
<tr>
<td>
<strong>AFI @Html.DisplayFor(modelItem => item.DocNum): @Html.DisplayFor(modelItem => item.Title)</strong>
<br />
@Html.DisplayFor(modelItem => item.DocSummary)
<br />
<span class="complianceitems">Number of compliance items:</span> (TBD)
</td>
<td>
<a href="/Documents/Index/@(Html.DisplayFor(modelItem => item.DocNum))">Checklist
Generator</a><br />
<a href="/UploadedDocs/@Html.DisplayFor(modelItem => item.DocFileName)" target="_blank">
Download PDF</a>
</td>
Любойпредложения о том, как мне достичь своей цели?
ДОБАВЛЕНО: Каждый документ может быть идентифицирован столбцом DocNum, в котором указан уникальный номер документа для этого конкретного документа.Я пытался перебрать список для извлечения каждого необязательного DocNum, а затем попытался сделать так, чтобы DocNum больше не появлялся в цикле ... но мне это не удалось.
Следующий оператор SQL дает мнерезультаты мне нужны.В заявлении предполагается, что искомое слово «бюджет».Я не знаю, как получить те же результаты, используя EF.Есть предложения?
SELECT DISTINCT DocNum, Title FROM Documents
WHERE
DocText LIKE '%budget%'
OR
Documents.Title LIKE '%budget%'
OR
DocNum LIKE '%budget%'