我正在做一个返回列表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;
}
- 你需要注意作用域。
- 你需要考虑返回一个错误代码,如果事情不是预期的 你应该使用async and await模式。
- 这里不需要交易
- 还应该使用标准的大小写和命名约定,例如
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结果不包含记录,则表示没有匹配数据。