Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从linq获取数据_C#_Asp.net_Asp.net Mvc_Linq_Asp.net Core - Fatal编程技术网

C# 如何从linq获取数据

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

我正在尝试从asp.net内核中的linq获取数据。我有一个带有FacultyID字段的Position表,如何从带有现有userid的Position表中获取它。我的问题

        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);
}