【问题标题】:Most efficient way of loading data into LINQ object for search result type method将数据加载到搜索结果类型方法的 LINQ 对象中的最有效方法
【发布时间】:2011-01-14 20:46:19
【问题描述】:

我目前有以下:

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 });
                    }
                }

【问题讨论】:

    标签: c# linq .net-3.5 c#-3.0 subsonic


    【解决方案1】:

    如果它们两者都包含条件怎么办?还是它们相互排斥?如果是这样

    Data = (s.Description != null ? s.Description : s.Summary)
    

    【讨论】:

    • 好点!如果它们都包含它,我将返回摘要
    【解决方案2】:

    我选择了选项 3

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      • 2013-03-17
      • 2014-05-24
      • 2013-07-11
      • 2014-10-31
      相关资源
      最近更新 更多