我正在构建一个 webapi,但遇到了一个奇怪的问题。
当我做这样的事情时
List<Content> items = new List<Content>();
然后我向其中添加项目
items.Add(new Content());
然后我调用 url localhost/api/Content/Get 我会得到一个很好的 xml 和我的项目 但是当我做这样的事情时
public IEnumerable<Content> Get()
{
List<Content> population = new List<Content>();
Content[] test = new Content[5];
var tmp = from c in db.Content select c;
using (IEnumerator<Content> enumerator = tmp.GetEnumerator())
{
while (enumerator.MoveNext())
{
Content ctmp = (Content)enumerator.Current;
population.Add(ctmp);
}
}
return population;
}
然后我调用相同的 url,得到空白(白色)页面。当我返回 tmp 变量时,我也有同样的想法。
更新:
感谢帮助。主要问题仍然存在。为什么正常的 List 被正确返回,而从 db 创建的 List 却没有。从 DataProxies.Content 复制到 CONtent 并不是我梦寐以求的解决方案,正如 Jon 所注意到的那样,这有点奇怪。
db.Content.ToList()
的样本都没有帮助:/我很困惑
最佳答案
大概您的 SQL 查询没有找到任何项目,因此从该方法返回的列表是空的。请注意,您的代码可以更简单地表示为:
public IEnumerable<Content> Get()
{
return db.Content.ToList();
}
或者可能:
public IEnumerable<Content> Get()
{
return db.Content.Cast<Content>().ToList();
}
您需要对 db.Content
进行更多解释,以便我们为您提供更多帮助。也许您应该创建一个新的数据库上下文?例如:
public IEnumerable<Content> Get()
{
using (FooDataContext db = new FooDataContext())
{
return db.Content.ToList();
}
}
编辑:如果您真的想确保您只是返回Content
对象,而不是动态代理,您可以这样写:
public IEnumerable<Content> Get()
{
using (FooDataContext db = new FooDataContext())
{
return db.Content
.ToList()
.Select(c => new Content { Name = c.Name,
Foo = c.Foo,
// etc
});
}
}
...只是直接复制属性。
关于c# - 来自数据库的数据未返回,但正常列表是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11905763/