2008-09-22 42 views
14

Cách tốt nhất để tự động viết các truy vấn LINQ và các biểu thức Lambda là gì?Biểu thức LINQ động và LINDA động?

Tôi đang nghĩ về các ứng dụng mà người dùng cuối có thể thiết kế các quy tắc logic nghiệp vụ, sau đó phải được thực thi.

Tôi xin lỗi nếu đây là câu hỏi của người mới, nhưng sẽ rất tuyệt vời để có được những kinh nghiệm tốt nhất.

Trả lời

1

Tôi có thể thấy hai cách bạn có thể tự động tạo lambda. Bạn có thể thử Reflection.Emit để tạo IL (the .Net bytecode) trực tiếp và gọi chúng là lambda hoặc bạn có thể sử dụng System.CodeDom và Microsoft.CSharp.CSharpCodeProvider để tạo mã từ các cấu trúc mức cao hơn. Những gì bạn muốn làm phụ thuộc vào cách bạn muốn người dùng nhập nội dung này. Nếu bạn muốn người dùng viết C# thì bạn chỉ có thể sử dụng trình biên dịch được tích hợp sẵn.

Tạo LINQ động phải dễ dàng hơn. Bạn sẽ có thể tạo ra các truy vấn LINQ như các cây biểu thức trong thời gian chạy và sau đó chuyển chúng vào một IQueryable để thực thi. Tôi khuyên bạn nên xem tài liệu về IQueryable để tìm hiểu thêm về điều này. Một cách khác là xác định trước một vài truy vấn LINQ và sau đó cho phép người dùng kết nối chúng lại với nhau. Điều này sẽ được hoàn toàn khả thi vì bất kỳ truy vấn LINQ nào trả về một IEnumerable có thể được truy vấn bởi truy vấn LINQ tiếp theo.

2

Một khả năng khác là tích hợp thời gian chạy tập lệnh vào chương trình của bạn, để người dùng của bạn có thể viết logic nghiệp vụ trong DSL. IronPython sẽ là một ứng cử viên.

+0

Tư vấn âm thanh. Chúng tôi đã làm điều đó để cấu hình quy trình công việc và nó hoạt động khá độc đáo. –

+0

nhược điểm duy nhất là bạn có thể gặp vấn đề với sự tin tưởng đầy đủ/một phần có thể ngăn mã của bạn thực thi trong asp.net – viggity

+0

đây là một khả năng, nhưng nó không phải là câu trả lời cho câu hỏi của tôi ... – Sklivvz

-1

Tôi không hiểu ý bạn là "cách tốt nhất". Nó sẽ là tốt hơn để cung cấp ví dụ đơn giản về những gì bạn muốn đạt được. Soạn biểu thức LINQ động không khó nhưng phức tạp.

Dưới đây là một ví dụ về việc tạo ra biểu LINQ động:

How do I compose existing Linq Expressions

+0

Aku, nếu nó phức tạp sau đó có những thực hành tốt nhất chắc chắn? – Sklivvz

+1

Tôi không biết "thực hành tốt nhất" cho những thứ như vậy. Tôi biết cách giải quyết vấn đề cụ thể, nhưng nói chung "cách tốt nhất" là vấn đề quá mơ hồ. – aku

0

biểu thức Lambda có thể dễ dàng tạo ra thông qua các không gian tên System.Linq.Expressions.

0

System.Linq.Expressions là những gì bạn cần. Tôi đã viết một giao diện người dùng đẹp cho phép người dùng xác định và xây dựng các truy vấn động dưới dạng một cây biểu thức. Sau đó, bạn có thể chuyển sang Linq2SQL hoặc ứng dụng khách mà bạn chọn.

Các vấn đề liên quan