Установка предложения LinqDataSource Where с использованием столбца DateTime

В С#.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'. Я пробовал несколько других способов, но я, очевидно, что-то пропустил.

Аналогичный код отлично работает для строк.

Ответ 1

это? Как насчет этого тогда...

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

Ответ 2

Я считаю, что вам нужно включить двойные кавычки вокруг строки, конвертируемой в DateTime.

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

Ответ 3

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

Ответ 4

Это просто и прямо:

Посмотрите в источнике страницы "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>

Ответ 5

Итак, окончательное решение, предложенное J.13.L, выглядело так:

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

Но так как я не хотел совпадать с временной частью даты, это действительно выглядело больше...

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

Ответ 6

Другой программный способ:

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