Наиболее эффективный способ загрузки данных в объект LINQ для метода типа результата поиска - PullRequest
1 голос
/ 09 февраля 2010

У меня сейчас есть следующее:

public IEnumerable<News> NewsItems
        {
            get { return from s in News.All() where s.Description.Contains(SearchCriteria) || s.Summary.Contains(SearchCriteria) select s; }
        }

Проблема в том, что мне нужно вернуть только одно свойство, которое на самом деле содержит данные, а также свойство Title, похожее на.

 return from s in News.All() where s.Description.Contains(SearchCriteria) || s.Summary.Contains(SearchCriteria) select new {Title = s.Title, Data = //Description or Summary containing the data

Как определить, какой из них содержит поисковый запрос?

ОБНОВЛЕНИЕ: У меня есть это, но оно, очевидно, попадает в БД 3 раза

 var FoundInSummary = News.All().Any(x => x.Summary.Contains(SearchCriteria));

                var FoundInDesc = News.All().Any(x => x.Description.Contains(SearchCriteria));

                IEnumerable<NewsEventSearchResults> result = null;

                if ((FoundInSummary && FoundInDesc) || (FoundInSummary))
                {
                    result = (from s in News.All() where s.Summary.Contains(SearchCriteria) select new NewsEventSearchResults { Title = s.Title, Data = s.Summary, ID = s.ID }).AsEnumerable();
                }
                else if (FoundInDesc)
                {
                    result = (from s in News.All() where s.Description.Contains(SearchCriteria) select new NewsEventSearchResults { Title = s.Title, Data = s.Description, ID = s.ID }).AsEnumerable();
                }

                return result;

ОБНОВЛЕНИЕ 2: Это более эффективно?

var ss = (from s in News.All() where s.Description.Contains(SearchCriteria) || s.Summary.Contains(SearchCriteria) select s).ToList();
                List<NewsEventSearchResults> resultList = new List<NewsEventSearchResults>();
                foreach (var item in ss)
                {
                    bool FoundInSummary = item.Summary.Contains(SearchCriteria);
                    bool FoundInDesc = item.Description.Contains(SearchCriteria);
                    if ((FoundInSummary && FoundInDesc) || (FoundInSummary))
                    {
                        resultList.Add(new NewsEventSearchResults { Title = item.Title, Data = item.Summary, ID = item.ID });
                    }
                    else if (FoundInDesc)
                    {
                        resultList.Add(new NewsEventSearchResults { Title = item.Title, Data = item.Description, ID = item.ID });
                    }
                }

Ответы [ 2 ]

2 голосов
/ 09 февраля 2010

Что если они оба содержат критерии?Или они взаимоисключающие?Если так

Data = (s.Description != null ? s.Description : s.Summary)
0 голосов
/ 10 февраля 2010

Я пошел с вариантом 3

...