问题 使用DateTime列设置LinqDataSource Where子句


在C#.net中,我有以下DataSource设置,我试图在后面的代码中动态分配WHERE子句...

<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
     ContextTypeName="MyNameSpace.DataClasses1DataContext"
     TableName="MyTableWithADateTimeColumn" >
</asp:LinqDataSource>

背后的代码看起来像这样......

LinqDataSource1.Where = "MyDateColumn == DateTime(" + DateTime.Now + ")";

这给了我一个错误 ')' or ',' expected。我也试过在引号内插入它,因为没有将它作为DateTime和引号标记...

LinqDataSource1.Where = @"MyDateColumn == """ + DateTime.Now + @""" ";

这给了我 Operator '==' incompatible with operand types 'DateTime' and 'String'。我已经尝试了其他几种方法,但我显然在这里遗漏了一些东西。

类似的代码适用于字符串。


4053
2018-06-26 20:54


起源



答案:


是这个吗?那怎么样......

LinqDataSource1.Where = "MyDateColumn == DateTime.Parse(" + DateTime.Now + ")"; 
//can't create a date from string in constructor use .Parse()...

11
2018-06-26 21:01



再看看...没有新的DateTime(字符串值)构造函数,你需要使用DateTime.Parse(字符串值)... - bytebender
使用双引号的DateTime可以正常工作。 - BrianG


答案:


是这个吗?那怎么样......

LinqDataSource1.Where = "MyDateColumn == DateTime.Parse(" + DateTime.Now + ")"; 
//can't create a date from string in constructor use .Parse()...

11
2018-06-26 21:01



再看看...没有新的DateTime(字符串值)构造函数,你需要使用DateTime.Parse(字符串值)... - bytebender
使用双引号的DateTime可以正常工作。 - BrianG


我相信你需要在被转换为DateTime的字符串周围加上双引号。

LinqDataSource1.Where = "MyDateColumn == DateTime(\"" + DateTime.Now.ToString() + "\")";

2
2018-06-26 21:00



我曾经尝试过没有演员阵容的单引号但是没想过用DateTime演员来尝试它们。不幸的是它给出了错误“字符文字必须包含一个字符” - BrianG
啊,是的 - 需要双引号。 EDITTING ... - Reed Copsey


LinqDataSource1.Where =“MyDateColumn == Convert.ToDateTime(\”“+ DateTime.Now +”\“)”;


1
2018-06-08 15:04





这很简单直截了当:

查看“asp:LinqDataSource”的页面源代码,并在“where”部分添加该子句。

通过向导使用NULL参数添加此操作失败。

这是一个例子:

<asp:LinqDataSource ID="LinqDataSource1" runat="server" ContextTypeName="MyDataContext"
    EntityTypeName="" GroupBy="MyItem" Select="new (key as Item1, Count() as TotalQuantity)"
    TableName="MyTable" 

    Where="Country == @Country &amp;&amp; DateProcessed == NULL">
    <WhereParameters>
        <asp:ControlParameter ControlID="ddlCountry" DefaultValue="US" 
            Name="Country" PropertyName="SelectedValue" Type="String" />
    </WhereParameters>
</asp:LinqDataSource>

1
2018-01-11 01:56





所以J.13.L建议的最终解决方案看起来像这样......

LinqDataSource1.Where = @"MyDateColumn == DateTime.Parse(""" + MyDateTime + @""") ";

但由于我不想在日期的时间部分匹配它看起来更像是......

LinqDataSource1.Where = @"MyDateColumn >= DateTime.Parse(""" + MyDateTime + @""") AND MyDateColumn < DateTime.Parse(""" + MyDateTime.AddDays(1) + @""")";

0
2017-09-10 16:57





另一种编程方式:

dataSource.WherePredicateParameters.Clear();
OrExpressionParameter expression = new OrExpressionParameter();
expression.Parameters.Add("Birthday", DbType.DateTime, Convert.ToDateTime(txtBirthday.Text).ToString());
dataSource.WherePredicateParameters.Add(expression);

0