Установка предложения LinqDataSource Where с использованием столбца DateTime - PullRequest
11 голосов
/ 27 июня 2009

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

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

Ответы [ 6 ]

11 голосов
/ 27 июня 2009

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

LinqDataSource1.Where = "MyDateColumn == DateTime.Parse(" + DateTime.Now + ")"; 
//can't create a date from string in constructor use .Parse()...
2 голосов
/ 27 июня 2009

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

LinqDataSource1.Where = "MyDateColumn == DateTime(\"" + DateTime.Now.ToString() + "\")";
1 голос
/ 11 января 2012

Все просто и понятно:

Просмотрите исходный код страницы "asp: LinqDataSource" и добавьте это предложение в раздел "где".

Не удается добавить это через мастер с параметром 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 голос
/ 08 июня 2010

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

0 голосов
/ 10 сентября 2009

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

dataSource.WherePredicateParameters.Clear();
OrExpressionParameter expression = new OrExpressionParameter();
expression.Parameters.Add("Birthday", DbType.DateTime, Convert.ToDateTime(txtBirthday.Text).ToString());
dataSource.WherePredicateParameters.Add(expression);
0 голосов
/ 29 июня 2009

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

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

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

LinqDataSource1.Where = @"MyDateColumn >= DateTime.Parse(""" + MyDateTime + @""") AND MyDateColumn < DateTime.Parse(""" + MyDateTime.AddDays(1) + @""")";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...