C# 如何从linq获取数据
我正在尝试从asp.net内核中的linq获取数据。我有一个带有FacultyID字段的Position表,如何从带有现有userid的Position表中获取它。我的问题C# 如何从linq获取数据,c#,asp.net,asp.net-mvc,linq,asp.net-core,C#,Asp.net,Asp.net Mvc,Linq,Asp.net Core,我正在尝试从asp.net内核中的linq获取数据。我有一个带有FacultyID字段的Position表,如何从带有现有userid的Position表中获取它。我的问题 var claimsIdentity = _httpContextAccessor.HttpContext.User.Identity as ClaimsIdentity; var userId = claimsIdentity.FindFirst(ClaimTypes.NameIdentif
var claimsIdentity = _httpContextAccessor.HttpContext.User.Identity as ClaimsIdentity;
var userId = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier)?.Value.ToString();
var data = _context.Positions.Where(p => p.UserID.ToString() == userId).Select(x => x.FacultyID).???;
我可以在标记后添加什么?获取数据。非常感谢您可以做几件事。你的例子是: var data=_context.Positions.Where(p=>p.UserID.ToString()==UserID)。选择(x=>x.FacultyID)。FirstOrDefault() 如果您期望的结果超过1个,那么您将执行以下操作:
var data=_context.Positions.Where(p=>p.UserID.ToString()==UserID)。选择(x=>x.FacultyID.ToList() 您必须了解查询和查询结果之间的差异 查询并不表示数据本身,它表示获取某些数据的可能性 如果仔细观察LINQ方法,您会发现有两组:返回
IQueryable
的LINQ方法和其他方法
IQueryable方法不执行查询。这些函数称为lazy,它们使用延迟执行。您可以在每个LINQ方法的备注部分找到这些术语
只要连接IQueryable LINQ方法,就不会执行查询。在单独的语句中连接LINQ方法并不昂贵
一旦开始枚举查询,就会执行该查询。在其最低级别,这是使用GetEnumerator
和MoveNext/Current
完成的:
IQueryable<Customer> customers = ...; // Query not executed yet!
// execute the query and process the fetched data
using (IEnumerator<Customer> enumerator = customers.GetEnumerator())
{
while(enumerator.MoveNext())
{
// there is a Customer, it is in property Current:
Customer customer = enumerator.Current;
this.ProcessFetchedCustomer(customer);
}
}
如果使用调试器,您将看到数据
是一个IQueryable
。您必须使用其他LINQ方法之一来执行查询
要获取查询中的所有职位,请执行以下操作:
List<Position> fetchedPositions result = data.ToList();
如果您想知道是否有任何职位:
if (positionAvailable = data.Any())
{
...
}
注意:如果使用IQueryable
,将再次从DbContext中获取数据。因此,如果您想有效地执行这三条语句,请确保不要三次使用原始数据:
List<Position> fetchedPositions result = data.ToList();
Position firstPosition = fetchedPostion.FirstOrDefault();
if (firstPosition != null)
{
ProcessPosition(firstPosition);
}
List fetchedPositions result=data.ToList();
Position firstPosition=fetchedPosition.FirstOrDefault();
if(firstPosition!=null)
{
过程位置(第一位置);
}
使用FirstOrDefault
if (positionAvailable = data.Any())
{
...
}
List<Position> fetchedPositions result = data.ToList();
Position firstPosition = fetchedPostion.FirstOrDefault();
if (firstPosition != null)
{
ProcessPosition(firstPosition);
}