如何在基于 ASP.NET 的服务器中查询 SingleResult 对象?

How to query a SingleResult object in a ASP.NET based server?

如何在基于 ASP.NET 的服务器中查询 SingleResult 对象?请帮助编写以下代码。

public class UserController : TableController<User> 
{
...

public Task DeleteUser(string id)
{
    SingleResult<User> user = Lookup(id);
    // I can drill down into user via the debugger and see the data
    // I'm looking for. But I don't know how to translate what I see 
    // in the debugger to a .Net call. 

    // This is what I see in the debugger:
    // new System.Linq.SystemCore_EnumerableDebugView 
    // <AlertMeService.DataObjects.User>(result.Queryable).Items[0].GroupNm 
    // which equals "fooGrp" 

    // The below call doesn't work
    // string GroupNm = user.GroupNm;

    // I need GroupNm from the object to send a group notification
    PostNotification(user.GroupNm, ...);
    return DeleteAsync(id);
}
...

非常感谢任何帮助。

SingleResultreturns一个IQueryable,所以使用LinqSingleSingleOrDefault方法执行查询并得到结果。

如果返回 0、2 或更多值,

Single 将抛出异常,而 SingleOrDefault 将允许 0 或 1 值,如果返回 2 或更多值将抛出异常。如果您想要多个值,则使用 First/FirstOrDefaultLast/LastOrDefault,或其他一些终端 Linq 方法,视情况而定

SingleResult<User> userQuery = Lookup(id);
User user = userQuery.SingleOrDefault();
if( user == null ) {

}
else {

}

根据您的描述,我检查了 SingleResult class:

public sealed class SingleResult<T> : SingleResult
{
    //
    // Summary:
    //     Initializes a new instance of the System.Web.Http.SingleResult`1 class.
    //
    // Parameters:
    //   queryable:
    //     The System.Linq.IQueryable`1 containing zero or one entities.
    public SingleResult(IQueryable<T> queryable);

    //
    // Summary:
    //     The System.Linq.IQueryable`1 containing zero or one entities.
    public IQueryable<T> Queryable { get; }
}

据我了解,您可以按如下方式修改 DeleteUser 方法:

public Task DeleteUser(string id)
{
    SingleResult<User> result = Lookup(id);
    var user=result.Queryable.SingleOrDefault();
    if(user!=null)
    {
      //I need GroupNm from the object to send a group notification
      PostNotification(user.GroupNm, ...);
      return DeleteAsync(id);
    }
    return Task.FromException($"the specific user with userid:{id} is not found.");
}