2009-06-26 18 views
11

Trong C# .net, tôi có thiết lập DataSource sau đây mà tôi đang cố gắng để tự động gán một mệnh đề WHERE để trong mã đằng sau ...Thiết lập LinqDataSource đâu khoản sử dụng DateTime Cột

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

Các mã sau trông giống như thế này ...

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

Điều này cho tôi lỗi số ')' or ',' expected. Tôi cũng đã cố gắng đúc nó bên trong dấu ngoặc kép, cũng như không đúc nó như DateTime và với dấu ngoặc kép ...

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

này mang lại cho tôi Operator '==' incompatible with operand types 'DateTime' and 'String'. Tôi đã thử một số cách khác, nhưng tôi rõ ràng là thiếu một cái gì đó ở đây.

Mã tương tự đang hoạt động tốt đối với chuỗi.

Trả lời

11

phải không? Gì về điều này sau đó ...

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

hãy xem lại ... không có hàm tạo DateTime (chuỗi giá trị) mới nào bạn cần sử dụng DateTime.Parse (giá trị chuỗi) ... – bytebender

+0

Với DateTime trong dấu nháy kép, tác phẩm này. – BrianG

2

Tôi tin rằng bạn cần bao gồm dấu ngoặc kép xung quanh chuỗi đang được chuyển đổi thành Ngày giờ.

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

Tôi đã cố gắng dấu nháy đơn mà không có dàn diễn viên nhưng đã không nghĩ đến để thử chúng với các diễn viên DateTime. Thật không may nó cho lỗi "Ký tự chữ phải chứa chính xác một ký tự" – BrianG

+0

Ahh, vâng - cần phải là dấu ngoặc kép. Đang sửa ... –

0

Vì vậy, giải pháp cuối cùng theo đề nghị của J.13.L trông như thế này ...

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

Nhưng vì tôi không muốn để phù hợp trên Hiện một phần của ngày nó thực sự trông như thế này ...

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

Một lập trình cách:

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

Nó đơn giản và thẳng về phía trước:

Look trong mã nguồn trang web của "asp: LinqDataSource" và thêm điều khoản đó trong "ở đâu" phần.

Việc thêm thông tin này thông qua trình hướng dẫn có tham số NULL không thành công.

Dưới đây là một ví dụ:

<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> 
Các vấn đề liên quan