【发布时间】:2011-08-17 13:16:16
【问题描述】:
我看过这个话题BETWEEN EQUIVALENT in LINQ
我在 SQL 中的原始查询:
SELECT ISNULL(Tcar.name, '') FROM dbo.models model
LEFT JOIN cars Tcar on Tcar.model = model.id AND
Tcar.year between model.Start and model.End
我需要在“左连接”之间实现,我试过这个:
我的课程:
public class car
{
public string name { get; set; }
public int model { get; set; }
public DateTime year { get; set; }
}
public class model
{
public int id { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
我的实现:
var theModel = from model in models
join Tcar in cars
on new
{
ID = (int)model.id,
DateStart = (DateTime)model.Start,
DateEnd = (DateTime)model.End
}
equals new
{
ID = (int)Tcar.model,
DateStart = (DateTime)Tcar.year,
DateEnd = (DateTime)Tcar.year
} into tempCar
from finalCar in tempCar
select new
{
CAR = (finalCar == null ? String.Empty : finalCar.name)
};
解决方法:
var theModel = from model in models
join Tcar in cars
on model.id equals Tcar.model
where model.Start <= Tcar.year && model.End >= Tcar.year
select new
{
CAR = Tcar.name
};
如果我使用解决方法 Linq 转换为该查询:
SELECT Tcar.name FROM dbo.models model
LEFT JOIN cars Tcar on Tcar.model == model.id
WHERE model.Start <= Tcar.year and model.End >= Tcar.year
我可以在“select new”之前放一个简单的where,但我必须通过这种方式实现,在左连接中使用“between”,我该怎么做?
【问题讨论】:
-
完全不相关,但您违反了 c# 命名约定。 =) 见这里:msdn.microsoft.com/en-us/library/xzf533w0(v=vs.71).aspx
-
牛仔裤,这是一个展示给社区的简单示例。
-
当然。 =) 如果看起来很熟悉,我只是觉得代码更容易理解。