搜索复杂对象类型列表中的项目

时间:2013-10-19 17:59:52

标签: c# linq list

我有一个名为User类型的用户列表,我搜索了具有userID的特定用户,我正在获取该用户的详细信息,但我希望搜索到的用户存储在用户类型变量中,这样我就可以将该特定用户传递给将User type作为参数的方法。我可以这样做吗?请帮忙。感谢。

我的代码:

        List<User> users = new List<User>();

        public void SearchUser()
        {
            Console.WriteLine("Enter user id");
            int userID = Convert.ToInt32(Console.ReadLine());
            var details = users.Where(i => i.ID == userID);
            Console.WriteLine("User Details are:");
            foreach (var item in details)
            {
                Console.WriteLine(item.Name);
                Console.WriteLine(item.Location);
            }
            User user = (User)details; //Here it throws exception, can I get the searched user as User type, so that I could pass it in the WritePost method
        }

       public void WritePost(User user)
       {
            //Code Here
       }

2 个答案:

答案 0 :(得分:3)

您需要使用First / FirstOrDefaultSingle / SingleOrDefault从列表中获取单个用户。

var user  = users.Where(i => i.ID == userID).First();

或更短:

var user = users.First(i=> i.ID == userID);

记住:

  

First =&gt;如果没有,它将返回第一个项目或抛出异常   找到了

     

FirstOrDefault =&gt;返回第一个项目,如果没有找到则返回null

var user = users.FirstOrDefault(i=> i.ID == userID);
if(user == null)
     Console.WriteLine("User not found");

由于您要查询ID,因此如果使用Single/SingleOrDefault会更好,因为如果从查询返回多个项目,它会抛出异常。

答案 1 :(得分:3)

details的类型为List<User>,因此您无法转换为User

我可能会做类似的事情:

List<User> users = new List<User>();

public void SearchUser()
{
    Console.WriteLine("Enter user id");
    int userID = Convert.ToInt32(Console.ReadLine());
    var user = users.Where(i => i.ID == userID).SingleOrDefault();
    if(user == null)
    {
        Console.WriteLine("User not found");
        return;
    }
    Console.WriteLine("User Details:");
    Console.WriteLine(user.Name);
    Console.WriteLine(user.Location);
}