2009-06-26 5 views
11

In C# .net, ich habe den folgenden Datasource-Setup, das ich dynamisch eine WHERE-Klausel in der Code-behind versuchen zuweisen ...Einstellen den LinqDataSource Where-Klausel mit Datetime-Spalte

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

Der Code hinter etwa wie folgt aussieht ...

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

Das gibt mir einen Fehler von ')' or ',' expected. Ich habe auch versucht, es in Anführungszeichen Gießen, als auch, wie ohne sie als Datum- und Gießen und mit Anführungszeichen ...

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

Das gibt mir Operator '==' incompatible with operand types 'DateTime' and 'String'. Ich habe mehrere andere Wege ausprobiert, aber mir fehlt hier offensichtlich etwas.

Ähnliche Code funktioniert gut für Strings.

Antwort

11

ist es das? Was ist dann dieses ...

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

werfen Sie einen Blick zurück ... es gibt keinen neuen DateTime (Zeichenfolgenwert) -Konstruktor, den Sie verwenden müssen DateTime.Parse (Zeichenfolgenwert) ... – bytebender

+0

Mit der DateTime in Anführungszeichen funktioniert das. – BrianG

2

Ich glaube, Sie müssen doppelte Anführungszeichen um die Zeichenfolge in eine DateTime konvertiert werden.

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

ich Apostrophe ohne die Darsteller versucht hatte, aber hatte nicht daran gedacht, sie mit der Datetime-Besetzung zu versuchen. Leider gibt es den Fehler "Zeichen Literal muss genau ein Zeichen enthalten" – BrianG

+0

Ahh, ja - muss doppelte Anführungszeichen sein. Editting ... –

0

So wie die endgültige Lösung sah wie folgt durch J.13.L vorgeschlagen ...

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

Aber da wollte ich nicht auf die passen Zeit Teil des Datums wirklich das es sah eher wie ...

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

Ein weiterer programmatisch Weg:

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

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

1

Es ist einfach und geradlinig:

Schauen Sie auf der Seite Quelle von „asp: LinqDataSource“ und diese Klausel in dem „where“ Abschnitt hinzufügen.

Das Hinzufügen durch den Assistenten mit einem NULL-Parameter schlägt fehl. Hier

ein Beispiel:

<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> 
Verwandte Themen