Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体及;LINQ方法链查询_C#_Linq_Entity Framework - Fatal编程技术网

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表的一部分。