Ответ 1
это? Как насчет этого тогда...
LinqDataSource1.Where = "MyDateColumn == DateTime.Parse(" + DateTime.Now + ")";
//can't create a date from string in constructor use .Parse()...
В С#.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'
. Я пробовал несколько других способов, но я, очевидно, что-то пропустил.
Аналогичный код отлично работает для строк.
это? Как насчет этого тогда...
LinqDataSource1.Where = "MyDateColumn == DateTime.Parse(" + DateTime.Now + ")";
//can't create a date from string in constructor use .Parse()...
Я считаю, что вам нужно включить двойные кавычки вокруг строки, конвертируемой в DateTime.
LinqDataSource1.Where = "MyDateColumn == DateTime(\"" + DateTime.Now.ToString() + "\")";
LinqDataSource1.Where = "MyDateColumn == Convert.ToDateTime(\" "+ DateTime.Now +" \ ")";
Это просто и прямо:
Посмотрите в источнике страницы "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 && DateProcessed == NULL">
<WhereParameters>
<asp:ControlParameter ControlID="ddlCountry" DefaultValue="US"
Name="Country" PropertyName="SelectedValue" Type="String" />
</WhereParameters>
</asp:LinqDataSource>
Итак, окончательное решение, предложенное J.13.L, выглядело так:
LinqDataSource1.Where = @"MyDateColumn == DateTime.Parse(""" + MyDateTime + @""") ";
Но так как я не хотел совпадать с временной частью даты, это действительно выглядело больше...
LinqDataSource1.Where = @"MyDateColumn >= DateTime.Parse(""" + MyDateTime + @""") AND MyDateColumn < DateTime.Parse(""" + MyDateTime.AddDays(1) + @""")";
Другой программный способ:
dataSource.WherePredicateParameters.Clear();
OrExpressionParameter expression = new OrExpressionParameter();
expression.Parameters.Add("Birthday", DbType.DateTime, Convert.ToDateTime(txtBirthday.Text).ToString());
dataSource.WherePredicateParameters.Add(expression);