2009-06-26 4 views
11

en C# .net, je la configuration de DataSource suivante que je suis en train d'attribuer dynamiquement une clause WHERE dans le code derrière ...Réglage de la LinqDataSource Lorsque l'article à l'aide DateTime Colonne

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

Le code derrière ressemble quelque chose comme ça ...

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

Cela me donne une erreur de ')' or ',' expected. J'ai aussi essayé de le jeter à l'intérieur des guillemets, ainsi, comme sans jeter comme DateTime et avec guillemets ...

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

Cela me donne Operator '==' incompatible with operand types 'DateTime' and 'String'. J'ai essayé plusieurs autres façons, mais il me manque évidemment quelque chose ici.

Le code similaire fonctionne correctement pour les chaînes.

Répondre

11

Est-ce cela? Qu'en est-ce alors ...

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

jetez un coup d'oeil ... il n'y a pas de nouveau constructeur DateTime (valeur de chaîne) que vous devez utiliser DateTime.Parse (valeur de chaîne) ... – bytebender

+0

Avec le DateTime entre guillemets doubles cela fonctionne. – BrianG

2

Je crois que vous devez inclure des guillemets autour de la chaîne en cours de conversion en DateTime.

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

J'avais essayé des guillemets simples sans le casting, mais ne l'avais pas pensé à les essayer avec le casting DateTime. Malheureusement, il donne l'erreur "Caractère littéral doit contenir exactement un caractère" – BrianG

+0

Ahh, ouais - doit être des guillemets. Editer ... –

0

donc la solution finale proposée par J.13.L ressemblait à ceci ...

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

Mais comme je ne voulais pas correspondre à la à temps partiel de la date à laquelle il avait l'air vraiment plus comme ça ...

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

Une autre façon par programme:

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

Il est simple et direct:

Rechercher dans la page source de "asp: LinqDataSource" et ajouter cette clause dans la section "où". L'ajout de ceci à l'aide de l'assistant avec un paramètre NULL échoue.

Voici un exemple:

<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> 
Questions connexes