我将以下SQL查询转换为LINQ
string qWhere;
DateTime startDate = DateTime.Parse("2018-02-01");
DateTime endDate = DateTime.Parse("2018-02-03");
if(manual == true)
{
qWhere = " deliveryDate>=" + startDate + " and deliveryDate<=" + endDate;
}
else
{
qWhere = "deliveryDate>=" + DateTime.Now;
}
string sqlQuery = "select * from LoadingOrder where " + qWhere;
任何人都可以帮我翻译这个查询到LINQ,表LoadingOrder有百万行。
非常感谢
答案 0 :(得分:2)
如果它只是一个条件,那么你可以有两个单独的查询而不是一个查询。我认为这更容易阅读和遵循,然后将条件放在查询本身。
var now = DateTime.Now;
if(manual)
result = LoadingOrders.Where(s=> s.deliveryDate >= startDate && s.deliveryDate <= endDate);
else
result = LoadingOrders.Where(s=> s.deliveryDate >= now);
假设查询有很多条件,并且“交付日期”条件是唯一更改的条件。在这种情况下,您可能不希望有两个完整版本的查询只有一个区别。在这种情况下,您可以单独创建一个条件。
要做到这一点,你需要创建一个Func<LoadingOrder, bool>
- 一个带LoadingOrder
并返回true或false的函数。然后,您可以指定要检查该功能的条件。
Func<LoadingOrder, bool> deliveryDateCondition;
if(manual)
deliveryDateCondition = loadingOrder =>
loadingOrder.deliveryDate >= startDate && loadingOrder.deliveryDate <= endDate;
else
{
var now = DateTime.Now;
deliveryDateCondition = loadingOrder => loadingOrder.deliveryDate >= now;
}
现在deliveryDateCondition
是一个函数,它接受LoadingOrder
并返回true或false。您可以将该函数添加到LINQ查询中,无论选择哪个函数,它都可以正常工作。
var result = LoadingOrders.Where(loadingOrder => deliveryDateCondition(loadingOrder)
&& ...some other condition...
&& ...some other condition...);
答案 1 :(得分:-1)
这样的事情:
DateTime startDate = DateTime.Parse("2018-02-01");
DateTime endDate = DateTime.Parse("2018-02-03");
bool manual = ...;
loadingOrders.Where(
o => o.DeliveryDate >= startDate &&
o.DeliveryDate <= endDate &&
manual ||
o.DeliveryDate >= DateTime.Now &&
!manual);
答案 2 :(得分:-2)
Random_Number PrintOut
2018-01-05 00:00:00 13 Too hot.
2018-01-05 06:00:00 2 Too cool.
2018-01-05 12:00:00 13 Too hot.
2018-01-05 18:00:00 5 Normal.
2018-01-06 00:00:00 10 Normal.
OR
select a.peopleid
, COUNT(*) as counted
from booking a
inner join people
on a.peopleid = people.peopleid
inner join status
on a.statusid = status.statusid
where status.status_desc = 'active'
group by a.personid