我在dbcontext api方法页面中遇到以下模块的问题,我是否应该尝试将日志转换为日志?
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace Logging.Models
{
public class Log : DbContext
{
public Log() : base("name=LogContext")
{
Database.SetInitializer<Log>(null);
}
public DbSet<Logs> Logs { get; set; }
public Logs GetLog(int Id)
{
return Logs.Find(Id);
}
public Logs AddLog(Logs p)
{
Logs.Add(p);
SaveChanges();
return p;
}
public Logs GetLogsByName(string lookupname)
{
List<Logs> mylist = new List<Logs>();
mylist = mylist.Where(p =>
p.LoggerName.Contains(lookupname)).ToList();
foreach (var item in mylist)
{
Logs.Add(item);
}
return Logs; <-- error come here see subject line
}
}
}
答案 0 :(得分:4)
这是你的方法应该是这样的,以便搜索在数据库中完成(而不是在内存中),并且该方法返回与过滤器匹配的日志列表:
public List<Logs> GetLogsByName(string lookupname)
{
return this.Logs.Where(p => p.LoggerName.Contains(lookupname)).ToList();
}
答案 1 :(得分:3)
Logs
是DbSet<Logs>
类型的属性,其中Logs
也是一种类型。这可能是混乱。您的return语句不会返回Logs
类型,而是Logs
属性(类型为DbSet<Logs>
)。您可以通过更好的命名来清除您的困惑。
DbSet<Logs>
可以投放到IEnumerable<Logs>
或IQueryable<Logs>
,但您的使用情况会使Logs
类似于某种类型的集合(您没有展示这是Logs
类,这意味着你要返回一个无法转换为简单集合的集合集合。
答案 2 :(得分:-2)
我的控制器:
[System.Web.Http.HttpGet]
[System.Web.Http.Route("GetByName")]
public IEnumerable<Logs> GetByName(string loggername)
{
var log = _repository.GetLogsByName(loggername);
if (log == null)
{
throw new HttpResponseException(
Request.CreateResponse(HttpStatusCode.NotFound));
}
else
{
return log;
}
}
我的dbcontext无论如何:
public IEnumerable<Logs> GetLogsByName(string lookupname)
{
List<Logs> mylist = Logs.ToList<Logs>();
return mylist.Where(p => p.LoggerName.Contains(lookupname)).ToList();
}