c# - 请 LINQ 查询帮助,对于每个作品?

标签 c# linq .net-3.5

我有一些代码在 LINQ 中根本无法工作的问题,但它确实可以作为一个简单的 for..each 工作。任何解释和解决方案将不胜感激。

我有 3 个类,Users、User 和 UserPermissions,组成如下:

类用户

ObservableCollection<User> GetList

类用户

Public int id  {get;set;}
Public string UserName  {get;set;}
Public UserPermissions Permissions {get;set;}

类用户权限

Public Int ID {get;set;}
Public int ApplicationID {get;set;}

这有效并返回正确的用户:

Users users = new Users();
foreach (User u in users.GetList() )
{
    if (u.UserName==username && u.Permissions.ApplicationID == applicationId)
    {
        usr = u;
        break;
    }
}

“应该”下面的 linq 做同样的事情,但事实并非如此。输出窗口中没有返回或引发错误,并且 musers 变量在跳过它之后根本不存在。我尝试在我的类型转换中更加具体并使用 AsQueryable。我什至尝试了 let p=u.Permissions,使用两个 from 命令,但似乎没有任何解决办法。

我担心的是我的其他类会受到此影响,并在以后使用更复杂的查询时导致问题。

var  musers = from Users.User u in UsersList
               where (u.UserName==userName) 
                       && (u.Permissions.ApplicationID == ApplicationId)
              select u.ID;

再多一点信息也有以下错误吗?

var t1 = UsersList.SelectMany( u => u.Permissions);

错误 1 ​​无法从用法中推断方法“System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable, System.Func>)”的类型参数。尝试明确指定类型参数。

最佳答案

        var usr = users.GetList()
            .FirstOrDefault(
                p => p.UserName == username 
                    && p.Permissions.ApplicationID == applicationId);

实际上应该为您做这件事。 FirstOrDefault 可以返回 null,如果没有找到用户...

关于c# - 请 LINQ 查询帮助,对于每个作品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18960962/

相关文章:

c# - 字符串中只允许单一类型的标记

c# - 为什么我不能在祖先类上使用 IComparable<T> 并比较子类?

c# - Async TCP Server 代码示例分析

c# - ADO.NET 实体模型更新

c# - 如何为 DetailsView 的插入和取消按钮分配不同的样式?

c# - 使用 LINQ Where/Take 返回最相关的搜索结果

c# - 我应该如何设置子类中属性的默认值?

c# - 寻找一种更好的方法来排序我的 List<T>

c# - EntityFrameworks.dll 文件丢失?