use*_*230 2 c# linq asp.net-web-api
我是.Net Web API的新手.
我想得到CreatedBy = 1的所有记录(这不是主键).
我的模特
public class Subject
{
[Key]
public int Id { get; set; }
public int UniId { get; set; }
public bool IsActive { get; set; }
public string Name { get; set; }
public string Code { get; set; }
public int CreatedBy { get; set; }
public int UpdatedBy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在Controller中的get方法
public Subject Get(int id)
{
IQueryable<Subject> query;
return query = from Subjects in db.SubjectContext.Where(v => v.CreatedBy == id).ToList();
}
Run Code Online (Sandbox Code Playgroud)
主要问题是你的Get方法在Controller设置中返回单个Subject对象,而不是List<Subject>.您的查询看起来正确.
主要变化需要如下
public List<Subject> Get(int id)
{
IQueryable<Subject> query;
return query = from Subjects in db.SubjectContext.Where(v => v.CreatedBy == id).ToList();
}
Run Code Online (Sandbox Code Playgroud)
另外,变量名称id不明确.使用类似的东西createdById乍看之下,这个id变量代表了一个创建了许多Subjects而不是a的id的用户Subject.
而且,我会对方法名称说同样的话Get......得到什么?Get也非常接近get属性声明中使用的C#关键字.它应该更具描述性.只是一些不影响你的问题的快速笔记:)
最后我会注意到你从函数返回的方式是非正统的,虽然技术上是正确的并且会编译.您可以跳过return语句中的变量赋值,甚至可以完全跳过使用变量,只返回List<Subject>..我还为DataContext添加了一个using语句,这是最佳实践:
public List<Subject> Get(int id)
{
using(var context = new YourDataContext())
{
var queryResult = (from Subjects in db.SubjectContext.Where(v => v.CreatedBy == id)).ToList();
return queryResult;
}
}
Run Code Online (Sandbox Code Playgroud)
或者没有LINQ语句,
public List<Subject> Get(int id)
{
using(var context = new YourDataContext())
{
return context.Subjects.Where(v => v.CreatedBy == id)).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)