C# 实体及;LINQ方法链查询
好的,假设下面是我导入到实体模型中的数据库结构:C# 实体及;LINQ方法链查询,c#,linq,entity-framework,C#,Linq,Entity Framework,好的,假设下面是我导入到实体模型中的数据库结构: Place ---------------- Id bigint PK Name varchar(10) Time ---------------- Id bigint PK PlaceId bigint FK_Place_Id StartTime datetime EndTime datetime DayOfWeek ---------------- Id bigint PK Name varchar(10) TimeDay
Place
----------------
Id bigint PK
Name varchar(10)
Time
----------------
Id bigint PK
PlaceId bigint FK_Place_Id
StartTime datetime
EndTime datetime
DayOfWeek
----------------
Id bigint PK
Name varchar(10)
TimeDayOfWeek
----------------
TimeId bigint PK FK_Time_Id
DayOfWeekId bigint PK FK_DayOfWeek_Id
在LINQ方法链中,我想做以下类似的事情:
public List<Place> GetPlaces(SearchRequest request)
{
using(var c = new Context())
{
var placereturn = c.Places.AsEnumerable();
if (request.StartTime.HasValue)
placereturn = c.Places.Where(s => s.Time.Any(t => t.StartTime >= request.StartTime));
if (request.EndTime.HasValue)
placereturn = c.Places.Where(s => s.Time.Any(t => t.EndTime >= request.EndTime));
if (request.DayOfWeek.HasValue)
placereturn = c.Places.Where(s => s.Time.Any(t => t.DayOfWeeks.Any(z => z.Day = request.DayOfWeek)));
return placereturn;
}
}
公共列表GetPlaces(SearchRequest)
{
使用(var c=newcontext())
{
var placereturn=c.Places.AsEnumerable();
if(request.StartTime.HasValue)
placereturn=c.Places.Where(s=>s.Time.Any(t=>t.StartTime>=request.StartTime));
if(request.EndTime.HasValue)
placereturn=c.Places.Where(s=>s.Time.Any(t=>t.EndTime>=request.EndTime));
if(request.DayOfWeek.HasValue)
placereturn=c.Places.Where(s=>s.Time.Any(t=>t.DayOfWeeks.Any(z=>z.Day=request.DayOfWeek));
返回地点返回;
}
}
除了星期几这一行之外,所有工作都在进行。您已经接近我认为您所追求的目标:
Public List<Place> GetPlaces(SearchRequest request)
{
using(var c = new Context())
{
var placereturn = c.Places;
if (request.StartTime.HasValue)
placereturn = placeretun.Where(???); //Any place that has a start time greater than or equal to the search start time
if (request.EndTime.HasValue)
placereturn = placeretun.Where(???);//Any place that has a end time less than or equal to the search end time
if (request.DayOfWeek.HasValue)
placereturn = placeretun.Where(???);//Any place where the day of week = the search day of week
return placereturn.ToList();
}
}
公共列表GetPlaces(SearchRequest)
{
使用(var c=newcontext())
{
var placereturn=c.地点;
if(request.StartTime.HasValue)
placereturn=placeretun.Where(???);//开始时间大于或等于搜索开始时间的任何位置
if(request.EndTime.HasValue)
placereturn=placeretun.Where(???);//结束时间小于或等于搜索结束时间的任何位置
if(request.DayOfWeek.HasValue)
placereturn=placeretun.Where(???);//星期几=搜索星期几的任何地方
return placereturn.ToList();
}
}
您可以继续附加到查询。在实际使用之前不会对其进行评估。在这种情况下,当您在返回时调用ToList时,将对其进行评估。我想您指的是问号:
if (request.StartTime.HasValue)
placereturn.Where(r => r.StartTime >= DateTime.Now);
等等…公共列表GetPlaces(SearchRequest)
public List<Place> GetPlaces(SearchRequest request)
{
using (var c = new Context())
{
var placereturn = c.Places.AsEnumerable();
if (request.StartTime.HasValue)
placereturn = c.Places.Where(s => s.Time.Any(t => t.StartTime >= request.StartTime));
if (request.EndTime.HasValue)
placereturn = c.Places.Where(s => s.Time.Any(t => t.EndTime >= request.EndTime));
if (request.DayOfWeek.HasValue)
placereturn = c.Places.Where(s => s.Time.Any(t => t.DayOfWeeks.Any(z => z.Name == request.DayOfWeek.Value)));
return placereturn;
}
}
{
使用(var c=newcontext())
{
var placereturn=c.Places.AsEnumerable();
if(request.StartTime.HasValue)
placereturn=c.Places.Where(s=>s.Time.Any(t=>t.StartTime>=request.StartTime));
if(request.EndTime.HasValue)
placereturn=c.Places.Where(s=>s.Time.Any(t=>t.EndTime>=request.EndTime));
if(request.DayOfWeek.HasValue)
placereturn=c.Places.Where(s=>s.Time.Any(t=>t.DayOfWeeks.Any(z=>z.Name==request.DayOfWeek.Value));
返回地点返回;
}
}
我找到了,这很有效 这样行吗?placereturn=placereturn.Where(s=>s.Time.Any(t=>t.StartTime>=request.StartTime.Value));我知道我忘记了placereturn=placereturn。啊!我是在记事本上写的。好的,所以我编辑了这个问题,现在开始和结束时间都可以了,但不是一周中的哪一天。这太离谱了。这将假定开始时间是places表的一部分。