Asp.Net web api - 如何获取所有记录

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)

Dmi*_*kin 5

主要问题是你的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)