Chuyển đến "câu hỏi cụ thể" nếu cần. Một số nền:Làm thế nào để viết LINQ SQL này như là một truy vấn động (sử dụng chuỗi)?
Kịch bản: Tôi có một bộ sản phẩm có bộ lọc "khoan xuống" (Đối tượng truy vấn) được điền bằng DDL. Mỗi lựa chọn DDL tiến bộ sẽ tiếp tục giới hạn danh sách sản phẩm cũng như các tùy chọn còn lại cho các DDL. Ví dụ, chọn một búa ra khỏi các công cụ giới hạn Kích thước sản phẩm để chỉ hiển thị kích thước búa.
Thiết lập hiện tại: Tôi đã tạo đối tượng truy vấn, gửi nó tới kho lưu trữ và cho mỗi tùy chọn vào hàm "giá trị bảng" của SQL trong đó giá trị null đại diện cho "nhận tất cả sản phẩm".
Tôi xem đây là một nỗ lực tốt, nhưng xa DDD có thể chấp nhận được. Tôi muốn tránh bất kỳ "lập trình" trong SQL, hy vọng làm tất cả mọi thứ với một kho lưu trữ. Nhận xét về chủ đề này sẽ được đánh giá cao.
câu hỏi cụ thể:
Làm thế nào tôi sẽ viết lại truy vấn này như một Dynamic Query? Một liên kết đến một cái gì đó như 101 Linq Examples sẽ là tuyệt vời, nhưng với một phạm vi truy vấn động. Tôi thực sự muốn chuyển sang phương thức này trường trong dấu ngoặc kép "" mà tôi muốn danh sách các tùy chọn và số lượng sản phẩm có tùy chọn đó.
from p in db.Products
group p by p.ProductSize into g
select new Category {
PropertyType = g.Key,
Count = g.Count() }
Mỗi tùy chọn DDL sẽ có "Lựa chọn (21)" trong đó (21) là số lượng sản phẩm có thuộc tính đó. Khi chọn một tùy chọn, tất cả các DDL còn lại sẽ cập nhật với các tùy chọn và số lượng còn lại.
Edit: Ghi chú thêm:
.OrderBy("it.City") // "it" refers to the entire record
.GroupBy("City", "new(City)") // This produces a unique list of City
.Select("it.Count()") //This gives a list of counts... getting closer
.Select("key") // Selects a list of unique City
.Select("new (key, count() as string)") // +1 to me LOL. key is a row of group
.GroupBy("new (City, Manufacturer)", "City") // New = list of fields to group by
.GroupBy("City", "new (Manufacturer, Size)") // Second parameter is a projection
Product
.Where("ProductType == @0", "Maps")
.GroupBy("new(City)", "new (null as string)")// Projection not available later?
.Select("new (key.City, it.count() as string)")// GroupBy new makes key an object
Product
.Where("ProductType == @0", "Maps")
.GroupBy("new(City)", "new (null as string)")// Projection not available later?
.Select("new (key.City, it as object)")// the it object is the result of GroupBy
var a = Product
.Where("ProductType == @0", "Maps")
.GroupBy("@0", "it", "City") // This fails to group Product at all
.Select("new (Key, it as Product)"); // "it" is property cast though
Những gì tôi đã học được cho đến nay là LinqPad là tuyệt vời, nhưng vẫn đang tìm kiếm một câu trả lời. Cuối cùng, nghiên cứu ngẫu nhiên như thế này sẽ thắng thế tôi đoán. LOL.
Edit:
Jon Skeet đã có một ý tưởng tuyệt vời: đúc những gì tôi cần là IGrouping<string, Product>
. Cảm ơn Jon Skeet! Khi bạn truyền đối tượng, bạn có thể liệt kê các tập hợp và nạp các kết quả vào một Danh sách riêng.
Bạn có cần truy vấn động không? Không phải tiêu chí lọc của bạn (mệnh đề Where) là khía cạnh động duy nhất? – Gabe
Tôi tin rằng tôi cần một DQ đầy đủ. Nếu không nhân đôi mã này cho mọi trường mà họ muốn lọc, tôi sẽ cần phải chỉ định trường GroupBy dưới dạng một chuỗi. –
Truyền tới IGrouping chỉ có thể khi bạn trả lại 'nó'. Khi bạn sử dụng .Select ("mới (Key, nó là sản phẩm, đếm() như đếm)") làm thế nào để đúc này ???? –