既然你有点困惑,我将提供比我最初的答案更详细的信息。让我们使用您的代码,创建一个非常简单的示例程序:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace SOSample
{
public class list
{
public int id { get; set; }
public List<Users> UsersList { get; set; }
public class Users
{
[Key]
public int Users_id { get; set; }
public string UserId { get; set; }
}
}
class Program
{
static void Main(string[] args)
{
// Instantiate and initialize with sample data.
var sampleList = new list()
{
id = 12345,
UsersList = new List<list.Users>()
{
new list.Users() { Users_id = 1, UserId = "0042" },
new list.Users() { Users_id = 2, UserId = "0019" },
new list.Users() { Users_id = 3, UserId = "0036" },
new list.Users() { Users_id = 4, UserId = "0214" },
new list.Users() { Users_id = 5, UserId = "0042" },
new list.Users() { Users_id = 6, UserId = "0042" },
new list.Users() { Users_id = 7, UserId = "0019" }
}
};
// Linq search.
var someId = "0042";
var linqQuery = sampleList.UsersList.Where(user => user.UserId == someId);
Console.WriteLine("Linq query results:");
foreach (var r in linqQuery)
{
Console.WriteLine($"Users_id: {r.Users_id}, UserId: {r.UserId}");
}
// Lookup search (using same someId as for Linq).
var lookup = sampleList.UsersList.ToLookup(user => user.UserId);
var lookupQuery = lookup[someId];
Console.WriteLine("\nLookup query results:");
foreach (var r in lookupQuery)
{
Console.WriteLine($"Users_id: {r.Users_id}, UserId: {r.UserId}");
}
}
}
}
输出:
Linq query results:
Users_id: 1, UserId: 0042
Users_id: 5, UserId: 0042
Users_id: 6, UserId: 0042
Lookup query results:
Users_id: 1, UserId: 0042
Users_id: 5, UserId: 0042
Users_id: 6, UserId: 0042
希望能澄清问题。我看到您的问题和评论的主要问题是,您可能将嵌套类误认为是属性。当实例化外部类时,内部类不会被实例化,它不是外部类的某种属性。
旧答案(提供个人详细信息):
我喜欢使用Linq。所以,假设
sampleList
属于类型
list
:
var query = sampleList.UsersList.Where(user => user.UserId == someId);
这会给你
IEnumerable<list.Users>
。您可以随时使用
ToList()
,
ToArray()
,
ToDictionary()
要获得所需的集合类型:
var results = sampleList.UsersList.Where(user => user.UserId == someId).ToArray();
远至
Lookup
,我见过几种使用方法,但我最熟悉的方法是:
var lookup = sampleList.UsersList.ToLookup(user => user.UserId);
var query = lookup[someId];
再一次,这会给你
IEnumerable<列表。用户>
。或者,您可以从该查询中获取您选择的集合类型:
var results = lookup[someId].ToArray();
基本上,您指定了键在该查找中表示的内容(它是
UserId
在这种情况下),然后当时间到来时,您按一个键进行搜索。