Trừ khi biến áp kết quả được sử dụng, phép chiếu sẽ dẫn đến danh sách các đối tượng ẩn danh với các giá trị dự kiến. Điều này sẽ là đủ cho databinding.
Để sử dụng khác, bạn muốn đặt biến thế kết quả sẽ tạo đối tượng của một loại đã biết. AliasToBeanTransformer
sẽ tạo đối tượng thuộc loại được chỉ định cho mỗi hàng và đặt thuộc tính của nó thành giá trị hàng.
Nếu bạn biết loại kết quả, bạn có thể sử dụng phương pháp chung List<T>()
.
var proj = Projections.ProjectionList()
.Add(Projections.Property("Id"), "Id")
.Add(Projections.Property("Username"), "Username");
var list2 = DetachedCriteria.For<User>()
.Add(Expression.Eq("Username", "lachlan"))
.GetExecutableCriteria(sessionFactory.GetCurrentSession())
.SetProjection(proj)
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
Biến thế kết quả cũng có thể được sử dụng trên truy vấn SQL và HQL.
list2 = Session.CreateSQLQuery("select Id, Username from user_table")
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
list2 = Session.CreateQuery("select Id, Username from User")
.SetResultTransformer(Transformers.AliasToBean(typeof(Result)))
.List<Result>();
Trong các ví dụ này, lớp Kết quả không cần phải là lớp được ánh xạ và phải có các thuộc tính đã chọn.
partial class Result
{
public int Id { get; set; }
public string Username { get; set; }
}
Nguồn
2010-02-05 13:35:01
mặc dù tôi không sử dụng khung 3.0 (từ khóa var), cuối cùng tôi có thể tìm ra cách chọn từng cột bằng cách sử dụng câu trả lời này! đưa tôi cả ngày để tìm nó –