4

我正在使用 Linq 和 MySql 数据库。我试图只从列表中获取前 10 个结果,但 Linq 的 Take 不会过滤结果,它只返回所有 59 个结果。

这是代码:

 List<EComQuoteSearchModel> results = new List<EComQuoteSearchModel>();

        //do not included quotes marked as deleted in the search results
       // int deletedStatusId = (int)IMSourcingPortal.Services.ecomQuoteSystem.EComQuoteStatus.Deleted;
        //&& qo.nquote_status.StatusId != deletedStatusId

        results = (from qo in db.nquote_orderheaders
                   join st in db.nquote_status on qo.StatusId equals st.StatusId
                   where (qo.QuoteOrderNumber.Contains(term) 
                        || qo.nquote_status.Name.Contains(term)
                        || qo.CustomerName.Contains(term)
                        || qo.IMCustomerNumber.Contains(term)) 
                   select new EComQuoteSearchModel()
                   {
                       CustomerName = qo.CustomerName,
                       CustomerNo = qo.IMCustomerNumber,
                       QuoteNo = qo.QuoteOrderNumber,
                       Status = st.Name
                   }).ToList();

        IEnumerable<EComQuoteSearchModel> firstTen = results.Take(10);
        var toret = firstTen.ToList();
        return toret;

任何想法表示赞赏。

4

1 回答 1

1

使用 .ToList() 实现结果后,情况完全相同。如果您只想过滤数据库中的前 10 个结果,请使用 THE QUERY。您需要在具体化查询之前包含 .Take(10) 。

下面的代码将向控制台写入 5 行。

// This simulates the results from your query after you materialize it with Tolist()
var results = new List<string>() { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };
foreach(var str in results.Take(5))
{
    Console.WriteLine(str); 
}

问题是因为您发送到 mysql 数据库的查询没有过滤吗?

于 2013-11-01T09:41:10.403 回答