Hoặc có thể có cách tốt hơn.Tôi có thể vượt qua T.Property không? Ngoài ra, các ý tưởng để cải thiện phương pháp này?
Tôi đang xây dựng trình tạo truy vấn động cho NHibernate, chúng tôi không muốn đặt HQL trực tiếp vào ứng dụng, chúng tôi muốn nó như ORN bất khả tri nhất có thể. Dường như hiện nay:
public override IEnumerable<T> SelectQuery(Dictionary<string, string> dictionary)
{
string t = Convert.ToString(typeof (T).Name);
string criteria = string.Empty;
foreach (KeyValuePair<string, string> item in dictionary)
{
if (criteria != string.Empty)
criteria += " and ";
criteria += item.Key + " = '" + item.Value + "'";
}
string query = " from " + t;
if (criteria != string.Empty)
query += " where " + criteria;
return FindByHql(query);
}
ok, tuyệt vời, tuy nhiên .... có hai điều trong đây mà đặt ra một vấn đề:
Truy vấn này chỉ xử lý "và" ban đầu của tôi suy nghĩ là để vượt qua là xây dựng một phương thức để tự động xây dựng từ điển có tên thuộc tính, giá trị và toán tử "và" hoặc "hoặc" và xây dựng từ điển cùng với một loạt các toán tử. Điều đó nghe có đúng không?
Ok, vì vậy, điều này làm việc TUYỆT VỜI, tuy nhiên, khi có một số nguyên nó không thành công do dấu nháy đơn. Những gì tôi nghĩ rằng sẽ là cách tốt nhất là có từ điển chấp nhận
<T.Property, string>
và sau đó phản ánh vào T.Property để tìm datatype và hành xử cho phù hợp. Tôi có quá phức tạp không?
Cảm ơn bạn.
tôi đã sử dụng này, ngoại trừ tôi đã đi với các từ điển tất cả cùng nhau và chỉ cần thêm "tài sản" như chuỗi các lớp QueryObject. Cảm ơn! –