如何通过linqdatasource的where筛选日期在某时间段的记录?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过linqdatasource的where筛选日期在某时间段的记录?相关的知识,希望对你有一定的参考价值。

要通过LinqDataSource实现SQL的“Select * from table where adate between @startdate and @enddate", 那个Linqdatasource.where=??

参考技术A 有一个好消息是DataList只关心LINQ查询通过LinqDataSource返回的字段名称 -- 当你不断改进 ..... 和SQL非常相似,LINQ允许你使用Where子句根据一定的条件筛选记录

ASP.NET LinqDataSource WHERE 子句

【中文标题】ASP.NET LinqDataSource WHERE 子句【英文标题】:ASP.NET LinqDataSource WHERE clause 【发布时间】:2010-12-28 03:49:48 【问题描述】:

我需要为我的LinqDataSource 创建一个 WHERE 子句,这取决于当前登录的用户。当然,我可以在代码隐藏中访问当前登录的用户,我特别需要用户 ID 从数据库中仅获取属于他/她的数据。

当我将Where 属性添加到<asp:LinqDataSource /> 标记时效果很好,但由于服务器控件中不能有<% %> 标记,我尝试在代码隐藏中设置Where 属性,在@ 987654326@,数据绑定之前连接到我的数据源的GridView。

但是,在代码隐藏中设置属性时,似乎没有效果。当我在 ascx 代码中手动(和静态)指定它时,它工作正常,但不是从代码隐藏。

我猜我在错误的顺序或错误的时间做事。我该怎么做?

更新:

想出了这个技巧。我使用虚拟标签lblViewedUserIDVisible="false" 来获取一个可以从中提取用户ID 的控件。我在数据绑定之前从代码隐藏中设置了这个标签的文本。

我还添加了 <WhereParameters> 和带有一堆属性的 <asp:ControlParameter />

<asp:LinqDataSource ID="dsLinqSource" AutoPage="true" AutoSort="true"
  ContextTypeName="Ortrac.Common.Dbml.OrComDataContext"
  EnableDelete="false" TableName="myTableName" EnableInsert="false"
  EnableUpdate="false" runat="server" Select="new(Edited, Activity)"
  Where="TheUserID.ToString().Equals(@ViewedUserID)"><%-- HACK! --%>
  <WhereParameters>
    <asp:ControlParameter Name="ViewedUserID" ControlID="lblViewedUserID"
                          Type="String" PropertyName="Text" />
  </WhereParameters>
</asp:LinqDataSource>

<%-- Dummy label --%>
<asp:Label runat="server" ID="lblViewedUserID" Visible="false" />

这真的是您编写 ASP.NET 的方式吗?

【问题讨论】:

您的方法为我节省了很多时间,谢谢! 【参考方案1】:

您发布的代码实际上是一种完全可以接受的方法。如果您需要经常这样做,您可以从 Parameter 类继承来制作您自己的自定义参数。这是我们使用的:

public class CurrentUserIdParameter : System.Web.UI.WebControls.Parameter


    protected override int Evaluate(System.Web.HttpContext context, System.Web.UI.Control control)
    
        if (Contact.Current == null) 
            return -1;
        
        else 
            return Contact.Current.ContactID;
        
    

这在很多情况下都很有效 - 我们还有 CurrentLanguageIdParameter、CurrentInstanceIdParameter 等。

【讨论】:

以上是关于如何通过linqdatasource的where筛选日期在某时间段的记录?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Linqdatasource 和 groupby 属性

当我们将 Telerik 网格与 LinqDataSource 一起使用时,如何在页面的各种按钮单击事件上重新生成网格数据

linq怎么分页

LinqDataSource - 你能限制返回的记录数量吗?

PowerShell Where-Object 筛选出包含指定内容的行

GridView 控件中使用 LinqDataSource 和分页的总行数