【问题标题】:ASP.NET MVC2 Linq Where Clause using StartsWithASP.NET MVC2 Linq Where 子句使用 StartsWith
【发布时间】:2010-07-16 05:27:09
【问题描述】:

I have a few filters on my view, the first one is list by first name, last name and company name when one of these options are selected the user can then select a, b, c ... x, y, z 仅显示以所选字母开头的人。

if (collection["Filter"] == "2") {
    presentations = presentations.Where(x => x.Person.FirstName.StartsWith("A"));
    presentations = presentations.OrderBy(x => x.Person.FirstName);
}

返回的结果类似于

John Squirel
Basil Boywiz
David Smith 

这似乎不起作用,我错过了什么?

我进一步挖掘,这是导致问题的查询。

SELECT  [t0].[Description], [t0].[EventId], [t0].[Id], [t0].[PresentedOn], 
          [t0].[Slug], [t0].[SpeakerId], [t0].[Title], [t0].[Url]
FROM      [Presentations] AS t0
LEFT      OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[Id])
WHERE    ([t1].[FirstName] LIKE 'B' + '%')
ORDER     BY [t1].[FirstName]

【问题讨论】:

    标签: c# linq asp.net-mvc-2


    【解决方案1】:

    好吧,在我们下面的长 cmets 之后,你为什么不像下面那样链接 linq 语句?

    if (collection["Filter"] == "2") { 
       presentations = presentations.Where(x => x.Person.FirstName.StartsWith("A")).
           OrderBy(x => x.Person.FirstName);
    }
    

    由于 WhereOrderBy 被推迟到您实际对查询执行某些操作,例如 ToList(),请尝试这样做:

    var orderedData = presentations.ToList();
    

    检查它,它应该按正确的顺序排列,因为我看不到您的 linq 有任何问题,除了您发布的代码在您执行 SelectToList 或其他操作之前从未真正执行过。

    【讨论】:

    • Presentation 和 Person 都是为了抽象目的而复制数据库表的类。
    • @Daniel Draper 不是我假设的 LinqToSql 类,但你填写了什么?编译?您遇到的确切问题是什么?它没有被正确过滤或排序吗?
    • 不,它们不是 LinqToSql 类,它们是使用 SubSonic Simple Repository 填充的。它们的顺序正确,但从上面的结果中可以看出,StartsWith 是问题所在。
    • 对不起,它编译并执行但返回无效结果。类型是 IQueryable 所以 .ToList() 会导致编译器错误
    • @Daniel Draper 我已经更新了我的答案。试试看是否有帮助。我这里时间不早了,所以我早上再回来看看。
    【解决方案2】:

    我已经设法解决了这个问题。如果您查看查询行

    LEFT OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[Id])
    

    应该阅读

    LEFT OUTER JOIN [Speakers] AS t1 ON ([t1].[Id] = [t0].[SpeakerId])
    

    虽然不太清楚为什么会发生这种情况,有人可以看看如何解决这个问题吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多