2010-06-10 26 views
10

Việc thiếu các cây biểu thức trong Compact Framework đã làm phiền tôi một thời gian, nhưng tôi chưa thực sự tìm kiếm giải pháp.Cây biểu hiện LINQ trong khung nhỏ gọn

Hôm nay, tôi đã tìm thấy một bài đăng trên blog về một System.Linq.Expressions thay thế được xây dựng trên đầu trang của Hệ thống Mono.Có sẵn và được sử dụng, ví dụ: bởi db4o (bạn có thể tìm thấy nó here).

Câu hỏi của tôi là - bạn đã sử dụng thư viện này chưa và nếu có, trải nghiệm của bạn với nó (đặc biệt là về hiệu suất) là gì?

+0

Tôi không thấy điểm, trừ khi cuối cùng họ nhận được 'System.Reflection.Emit' để làm việc trên các thiết bị 'nhỏ gọn'. – leppie

+1

@leppie: tốt, vấn đề là có các truy vấn LINQ dựa trên biểu thức trên Compact Framework. Bằng cách này, nhà phát triển vẫn có thể sử dụng LINQ để viết các truy vấn của nó, và db4o có thể biến truy vấn LINQ dựa trên biểu thức thành cơ chế truy vấn cơ bản của nó. Đối với trường hợp biểu thức không thể được tối ưu hóa bởi db4o, biểu thức được diễn giải, để phá vỡ sự thiếu SRE. –

Trả lời

2

Đối với LINQ to db4o, System.Linq.Expressions hoạt động khá tốt. Nó có thể sẽ không phải là nút cổ chai của một ứng dụng Compact Framework truy vấn một nguồn LINQ không đối tượng.

Nếu bạn chỉ sử dụng nó để thực hiện một số chương trình meta, sử dụng Biên dịch lặp đi lặp lại, nó sẽ không hoạt động tốt trên màn hình, vì nó cơ bản là trình thông dịch dựa trên phản chiếu. Đối với những gì nó có giá trị, thông dịch viên vượt qua bộ kiểm tra Mono đầy đủ cho cây biểu hiện (nó khá hậu quả).

Lỗi duy nhất biết với nó có liên quan đến a missing feature of the Compact Framework BCL, làm cho csc không thể phát ra một cây biểu thức thích hợp khi các trường chung có liên quan.

2

Điều này không trực tiếp trả lời câu hỏi của bạn, nhưng bạn có thể thấy nó thú vị. IronPythonIronRuby vận chuyển với mã nguồn để triển khai .NET 4.0 của System.Linq.Expressions. Họ cũng có một thông dịch viên cho cây biểu hiện Linq/DLR. Tomáš Matoušek có thể làm cho IronRuby hoạt động trên trình mô phỏng Windows Phone bằng cách sử dụng trình thông dịch này.

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