Serializing và Deserializing Expression Trees in C #


92

Có cách nào để Hủy số hóa biểu thức trong C # không, tôi muốn lưu trữ Biểu thức trong Cơ sở dữ liệu và tải chúng khi chạy.


những loại biểu thức nào? Regex?
Jon Limjap

16
Tôi giả sử các biểu thức kiểu System.Linq.Expression, với "cây".
David Wengier

1
bạn có thể sử dụng codeproject.com/Articles/851187/…
Mohammad Dayyan

Câu trả lời:


48

Tôi tiếp tục làm việc trên thư viện đã được đề cập bởi Serializing and Deserializing Expression Trees in C #

Có vẻ như dự án đã bị bỏ rơi (2008) nhưng tôi đã thực hiện một số thao tác với nó và bây giờ nó hoạt động với .NET 4.0 và Silverlight. Tôi đã sửa lỗi cho mã của họ và cũng làm cho nó độc lập với DAL hơn.

http://expressiontree.codeplex.com/


2
+1 để đưa ra giải pháp hiệu quả. Tôi đã thử sử dụng thư viện gốc trên MSDN và nó không thể giải mã hóa một nút biểu thức nhị phân đơn giản. Dự án của bạn hoạt động tuyệt vời. Cảm ơn!
Giải pháp dữ liệu Jacobs

2
Nó có phải là dự án trên Nuget?
Mohammad Dayyan

@MohammadDayyan, Microsoft đã thiếu quyết đoán và không nhất quán trong công cụ quản lý gói của mình. Đôi khi các gói ASP.NET CORE có thể được cài đặt với Nuget, trong các trường hợp khác, ví dụ như trình điều khiển MongoDB sẽ không khả dụng qua NuGet. Ít nhất thì Microsoft cũng có cái nhìn sâu sắc để cho phép NPM quản lý các gói. Nhiều khả năng sẽ đưa cái này lên NPM
T. Webster

@RepoMan giải quyết một vấn đề có giá trị hơn rất nhiều đối với tôi khi nó giúp được ai đó. Có lẽ bạn có thể đóng góp một số tài liệu về cách sử dụng - chúng ta hãy nói chuyện ..
T. Webster

14

Tùy chọn khác là dự án Chuỗi chuỗi biểu thức trên code.msdn.com - sẽ có nhiều hơn những gì cần thiết ở đây?

UPD: Hiện tại http://archive.msdn.microsoft.com/exprserialization


Mã tuần tự hóa của cây biểu thức bị xóa khỏi thư viện mã code.msdn.microsoft.com/exprserialization , bất kỳ ý tưởng nào về nơi nó được chuyển đến hoặc các lựa chọn thay thế tốt hơn?
Kiran Bheemarti

@Kiran: Ý bạn là gì? Việc tải xuống mã vẫn ở đó; kiểm tra tab tải xuống ở đầu trang.
Robert Harvey

Vâng, nó bây giờ, có lẽ là một điều tạm thời, trang đã ném một dự án không tìm thấy lỗi ngày hôm qua khi tôi thử liên kết trên. Tôi xem dự án và tải xuống ngay bây giờ. Cảm ơn!!!
Kiran Bheemarti

13

Có một dự án trên GitHub / Nuget tên là MetaLinq nhằm mục đích làm cho việc làm việc với biểu thức tress dễ dàng hơn.

Nó chuyển đổi giữa các Biểu thức bình thường và 'Biểu thức có thể chỉnh sửa', có thể thay đổi và hoàn toàn có thể tuần tự hóa, vì vậy có thể được sử dụng với Json, Xml, Binary, v.v.

Cũng kiểm tra bài đăng trên blog này để biết thêm thông tin.


12

hãy xem thư viện mới của tôi Serialize.Linq . Nó tuần tự hóa các biểu thức linq thành json, xml và binary.


bạn đã sử dụng cái này bao giờ chưa trải nghiệm của bạn như thế nào / tìm thấy bất kỳ hạn chế nào?
Alexandre Brisebois

tôi đã sử dụng một phiên bản tương tự của nó trong dự án cuối cùng của mình. hoạt động tốt.
esskar

Tại sao bạn lại viết một cái gì đó làm cho dòng giữa các tầng tồi tệ hơn? Bạn đang thúc đẩy việc hiển thị các đối tượng miền DAL với BAL ... trừ khi thư viện của bạn bằng cách nào đó tự động chuyển đổi DTO (và các truy vấn chống lại chúng) thành các đối tượng / truy vấn miền. Tôi không thấy bất kỳ điều gì trong tài liệu chỉ ra hành vi như vậy.
M.Babcock

@ M.Babcock: những gì bạn muốn sử dụng trong biểu thức DTO vs Entities không phải là một phần logic của thư viện.
esskar

4
@esskar blog / toàn bộ trang web của bạn dường như đã biến mất. nó đã di chuyển chưa?
Jon

3

Không đầy đủ; tuy nhiên, mẫu Dynamic LINQ có thể giúp ích một chút. Bạn chắc chắn có thể tuần tự hóa một biểu thức thành một chuỗi (ở một mức độ nào đó - generics trông hơi rắc rối), nhưng không có trình phân tích cú pháp sẵn có.


Tôi không thể tìm ra cách tuần tự hóa một biểu thức thành một chuỗi bằng cách sử dụng mẫu, chỉ theo hướng khác, để lấy dưới dạng chuỗi và tạo một cây biểu thức. Tôi gọi phương pháp nào?
Christopher Edwards


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.