名称在当前上下文中不存在,ApiController, asp.net core, IEnumerable



我正在做一个返回列表IEnumerable的服务,问题是当返回元素IEnumerable时出现这个错误:名称' actitieslist '不存在于当前上下文中我分享你我的代码,错误出现在最后一行:返回actitieslist;

[HttpPost]
[Route("user/get-user-activities")]
public IEnumerable<ActivitiesClass> GetUserActivities()
{
string email = User.FindFirstValue(ClaimTypes.Email);
try
{
if (!String.IsNullOrEmpty(email))
{
using (SecondAppContext db = new SecondAppContext())
{
using (var transaccion = new TransactionScope())
{
User UserModel = db.User
.Where(b => b.Email == email)
.First();
var IdUser = UserModel.Id;
IEnumerable<ActivitiesClass> ActivitiesList = 
(
from activity in db.Activities
where activity.IdUser == IdUser &&
activity.DateCreated > DateTime.Now.AddDays(-3)
select new ActivitiesClass 
{
dataCreated = activity.DateCreated,
description = activity.Description,
category = activity.Category,
gender = activity.Gender,
ageMin = (int)activity.AgeMin,
ageMax = (int)activity.AgeMax
}).ToList();
transaccion.Complete();
}
}
}
}
catch (Exception ex)
{
Error(ex.ToString());
}
return ActivitiesList;
}
  1. 你需要注意作用域。
  2. 你需要考虑返回一个错误代码,如果事情不是预期的
  3. 你应该使用async and await模式
  4. 这里不需要交易
  5. 还应该使用标准的大小写和命名约定,例如User userModel

未经测试的示例

public async Task<IEnumerable<ActivitiesClass>> GetUserActivities()
{
string email = User.FindFirstValue(ClaimTypes.Email);
if (string.IsNullOrEmpty(email))
return null; // you should think about this
try
{
await using var db = new SecondAppContext();
// what are yu going to if the user is not found?
var userModel = await db.User
.Where(b => b.Email == email)
.FirstOrDefaultAsync();
if (userModel == null)
return null; // you should think about this
return await (
from activity in db.Activities
where activity.IdUser == userModel.Id && activity.DateCreated > DateTime.Now.AddDays(-3)
select new ActivitiesClass
{
dataCreated = activity.DateCreated,
description = activity.Description,
category = activity.Category,
gender = activity.Gender,
ageMin = (int) activity.AgeMin,
ageMax = (int) activity.AgeMax
}).ToListAsync();
}
catch (Exception ex)
{
Error(ex.ToString());
}
return null; // you should think about this
}

名称' actitieslist '在当前上下文中不存在

问题与您在if语句中定义ActivitiesList有关,因此它将显示上述错误。此外,由于IEnumerable<T>是一个接口,我建议您可以定义一个List<ActivitiesClass>实例来存储返回的数据。

尝试如下修改代码:

[HttpPost]
[Route("user/get-user-activities")]
public IEnumerable<ActivitiesClass> GetUserActivities()
{
string email = User.FindFirstValue(ClaimTypes.Email);
//define a List<ActivitiesClass> to store the return data.
List<ActivitiesClass> ActivitiesList = new List<ActivitiesClass>();
try
{
if (!String.IsNullOrEmpty(email))
{
using (SecondAppContext db = new SecondAppContext())
{
using (var transaccion = new TransactionScope())
{
User UserModel = db.User
.Where(b => b.Email == email)
.First();
var IdUser = UserModel.Id;
//set values for the ActivitiesList 
ActivitiesList =
(
from activity in db.Activities
where activity.IdUser == IdUser &&
activity.DateCreated > DateTime.Now.AddDays(-3)
select new ActivitiesClass
{
dataCreated = activity.DateCreated,
description = activity.Description,
category = activity.Category,
gender = activity.Gender,
ageMin = (int)activity.AgeMin,
ageMax = (int)activity.AgeMax
}).ToList();
transaccion.Complete();
}
}
}
}
catch (Exception ex)
{
Error(ex.ToString());
}
return ActivitiesList; //Call the `.AsEnumerable()` method, if you want to convert the List to the IEnumerable<>.
}

调用此方法后,如果IEnumerable结果不包含记录,则表示没有匹配数据。

最新更新