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

时间:2014-01-11 01:46:45

标签: 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; }
}

我在Controller中的get方法

public Subject Get(int id)
    {
        IQueryable<Subject> query;
        return query = from Subjects in db.SubjectContext.Where(v => v.CreatedBy == id).ToList();
    }

1 个答案:

答案 0 :(得分: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();
}

在旁注中,变量名id不明确。使用createdById之类的内容,乍看之下,id变量代表了一个创建了许多Subjects而不是Subject的ID的用户。

而且,我会对方法名Get说同样的话......得到什么? Get也非常接近属性声明中使用的C#关键字get。它应该更具描述性。只是一些不会影响您的问题的快速笔记:)

最后我会注意到你从函数返回的方式是非正统的,虽然技术上是正确的并且会编译。您可以跳过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;
    }
}

或没有LINQ语句,

public List<Subject> Get(int id)
{
    using(var context = new YourDataContext())
    {
        return context.Subjects.Where(v => v.CreatedBy == id)).ToList();
    }
}