Tôi có một bảng với một ánh xạ từ một đến nhiều bảng có nhiều ánh xạ tới một bảng khác. Tôi muốn thực hiện những điều sau:linq cho các thực thể, một mệnh đề where in where? (bên trong)
var results = context.main_link_table
.Where(l => l.some_table.RandomProperty == "myValue" &&
l.some_table.many_to_many_table
.Where(m => m.RandomProperty == "myValue"));
Làm cách nào để có thể đạt được điều này? Phần đầu tiên sẽ làm việc nhưng khi thử nó mà không có 'bên trong WHERE', tôi không thể truy cập thuộc tính của many_to_many_table, nhưng "bên trong" rõ ràng sẽ không biên dịch. Về cơ bản tôi muốn đạt được một cái gì đó giống như truy vấn SQL sau:
SELECT * from main_link_table
INNER JOIN some_table AS t1 ON t1.association = main_link_table.association
INNER JOIN many_to_many_table AS t2 ON t2.association = some_table.association
WHERE t1.RandomProperty = 'MyValue' AND t2.RandomProperty = 'MyValue'
Đó là dường như đơn giản nhưng tôi không thể tìm thấy một cách để đạt được điều đó trong một dòng duy nhất của LINQ - sử dụng nhiều dòng để đạt được hiệu quả mong muốn trả quá nhiều kết quả và cuối cùng tôi phải lặp lại chúng. Tôi cũng đã cố gắng những thứ như:
var results = main_link_tbl.Include("some_table.many_to_many_table")
.Where(l => l.some_table.many_to_many_table.<property>
== "MyValue")
Nhưng vào thời điểm này tôi không thể chọn một tài sản của many_to_many_table trừ khi tôi thêm một FirstOrDefault(), sẽ xóa tác dụng vì nó sẽ không tìm kiếm thông qua tất cả các hồ sơ.
việc gì đã làm, nhưng đòi hỏi nhiều dòng mã và ở chế độ nền trả quá nhiều kết quả trong truy vấn SQL được xây dựng bởi các LINQ-to-entity framework:
var results = db.main_link_table.Include("some_table")
.Include("some_table.many_to_many_table")
.Where(s => s.some_table.RandomProperty
== "myValue")
.Select(s => s.some_table);
foreach(var result in results) {
var match_data = result.Where(s => s.many_to_many_table.RandomProperty
== "myValue");
}
Đoạn mã này sẽ trả lại tất cả các hàng bên trong some_table khớp với điều kiện Where first và sau đó áp dụng điều kiện Where tiếp theo, trong khi tôi rõ ràng chỉ cần một hàng duy nhất nơi many_to_many_table.RandomProperty bằng myValue.
trình như một say mê. – L2Eer
rất đẹp. – qakmak