c#linq:获取按列表中的值过滤的结果列表

时间:2014-07-09 11:25:59

标签: c# linq entity-framework

我在下面有以下声明(我需要更改名称以便在此处发布)。本质上我有一个特定的用户标识,并希望过滤哪些文件夹已创建,这些文件夹不是由该用户创建的,而是将其中一个文件夹作为父文件夹。)

编辑: 到目前为止的代码(数据库中的目录包含int DirectoryId,int ParentDir,String UserId,String Path) 这里是目录的定义

public partial class Directory
{
public int DirectoryId { get; set }
public Nullable<int>ParentDir {get; set;}
public string UserId { get; set; }
public string Path { get; set; }
}

这里是代码:

 public static List<Directory> GetAllNonUserDirs(string userId)
        {
            MYEntities entity = new MYEntities();
            List<int> DirectoriesOfUser = (from i in entity.Directory
                                                 where (i.UserId == userId)
                                                 select i.DirectoryId).ToList();
            return (from i in entity.Directory where (i.UserId != userId && i.ParentDir.HasValue 
             && DirectoriesOfUser.Contains(i.ParentDir.Value)) select i);
        }

现在问题是sas错误“无法将类型'System.Linq.IQueryable&lt; ....&gt;隐含地转换为System.Collecitions.Generic.List&lt; ....&gt;。

我的问题是如何解决这个问题(它是由我已经确定的包含部分引起的),还是有更简单的方法来执行linq语句?

注意:Writeerrors可能发生了,因为我没有复制代码,而是重写了这里。

1 个答案:

答案 0 :(得分:0)

在您返回的ToList()之后添加LINQ。如下所示:

 public static List<Directory> GetAllNonUserDirs(string userId)
        {
            MYEntities entity = new MYEntities();
            List<int> DirectoriesOfUser = (from i in entity.Directory
                                                 where (i.UserId == userId)
                                                 select i.DirectoryId).ToList();
            return (from i in entity.Directory where (i.UserId != userId && i.ParentDir.HasValue 
             && DirectoriesOfUser.Contains(i.ParentDir.Value)) select i).ToList();
        }