我正在为显示的网格编写过滤器,因此显示的唯一项目是那些与登录的人具有相同位置 ID 的项目。我有 linq 查询来获取登录用户的位置(是的,用户可以有多个位置),现在我正在尝试写什么
我有一个变量,有时是一个列表,有时是一个值,但从不为空(它是一个位置代码列表)。我尝试了几种不同的方法,但都抛出错误。
public List<Person> GetPeople()
{
var UserLoc = repo.GetUserLocations();
foreach (var item in UserLoc)
{
var query = (from p in db.Person
join t in db.TrespassedLocation on p.PersonId equals t.PersonId
where t.SiteCode == item.LocationCode
select p).ToList();
return query;
}
// Don't know what to return here?
}
如果我能弄清楚在 foreach 之外要返回什么,上面看起来会起作用。
我也试过:
public List<Person> GetPeople()
{
var UserLoc = repo.GetUserLocations();
var query = (from p in db.Person
join t in db.TrespassedLocation on p.PersonId equals t.PersonId
where t.SiteCode equals UserLoc
select p).ToList();
return query;
}
但这会在 where 子句中出现“无法将字符串转换为布尔值”错误。我尝试使用'=='而不是'equals',同样的错误。
最后我尝试了这样的“包含”:
where t.SiteCode.Contains(UserLoc)
但这会给出错误“最佳匹配重载具有无效参数”,可能是因为它需要一个字符串,而不是一个列表。
==== 编辑 ====
根据提供的链接,我想出了这个:
public List<Person> GetPeople()
{
var UserLoc = GetUserLocations();
var query = db.Person
.Join(db.TrespassedLocation,
p => p.PersonId,
t => t.PersonId,
(p, t) => new { p, t })
.Where(t.SiteCode.equals(UserLoc));
}
但我仍然在 where 子句中遇到错误('t' 不存在,如果尝试包含而不是等于它抱怨无效参数。