Với LINQ to Entities, tôi đang cố truy vấn bảng Nhật ký để tìm các hàng gần một hàng phù hợp. Tôi gặp sự cố khi thêm ngày bên trong truy vấn. Đây là những gì tôi có cho đến nay.Thêm ngày trong LINQ vào đối tượng
from
l in objectSet.Logs
let
match = objectSet.Logs.Where(whatever).FirstOrDefault()
where
l.Timestamp > (match.Timestamp - twoHours)
&& l.Timestamp < (match.Timestamp + twoHours)
select
l
Rời ra "bất cứ điều gì" điều kiện tìm thấy hàng Tôi quan tâm đến, "twoHours" đã variably được một khoảng thời gian, một chức năng .AddHours()
và vân vân. Tôi đã không tìm thấy đúng cách mà EF có thể tạo ra SQL mà thêm giá trị từ một trường (match.Timestamp) vào một hằng số.
Giải pháp hiển nhiên là thực hiện truy vấn "khớp" trước rồi sử dụng giá trị bằng chữ trong truy vấn thứ hai, nhưng tôi đã đơn giản hóa ví dụ mã ở đây thành vấn đề chính (thêm ngày trong truy vấn) và thực tế truy vấn của tôi phức tạp hơn và điều này sẽ không lý tưởng.
Cheers
Tôi đã có một vấn đề tương tự. Vấn đề là .AddHours() không có một SQL tương đương, và do đó, LINQ không thể chuyển đổi nó thành một biểu thức SQL. Tôi đã khắc phục điều này bằng cách gọi thực thi bị trì hoãn bằng cách gọi .ToList() và sau đó áp dụng bộ lọc .AddHours() của bạn trên một bộ sưu tập trong bộ nhớ. – dotariel
@ XSaint32, đó là sai hai lần. Có * là * [a (T) SQL tương đương,] (http://msdn.microsoft.com/en-us/library/ms186819.aspx) và bạn * có thể * gọi nó từ EF. –
@Craig - Cảm ơn bạn đã nhập. Tôi đã không nhận thức được điều đó. – dotariel