Linq to sql for…each循环是从自定义对象的IQueryable中提取基本体列表的最佳方法吗?

Linq to sql for…each循环是从自定义对象的IQueryable中提取基本体列表的最佳方法吗?,linq-to-sql,Linq To Sql,例如,如果我有一个Person对象的IQueryable,每个人都有一个年龄ID,我想进行另一个查询,从一个包含整数ID的表中选择所有行,该整数ID在此IQueryable ID中 我可以用这样的东西吗 List<int> AgeList = new List<int>(); foreach(Person p in Persons) { AgeList.Add(p.Age); } var ageStats = from a in db.Ages

例如,如果我有一个Person对象的IQueryable,每个人都有一个年龄ID,我想进行另一个查询,从一个包含整数ID的表中选择所有行,该整数ID在此IQueryable ID中

我可以用这样的东西吗

List<int> AgeList = new List<int>();

foreach(Person p in Persons)
{
    AgeList.Add(p.Age);
}

var ageStats = from a in db.Ages
                where AgeList.Contains(a.Age)
                select a;
List AgeList=new List();
foreach(个人中的p个人)
{
年龄列表。添加(p.年龄);
}
var ageStats=以db.Ages为单位从a开始
其中AgeList.Contains(a.Age)
选择一个;
或者,有什么更好的方法可以让我不必循环

谢谢

你能行

List<int> AgeList = Persons.Select(p => p.Age);
List AgeList=Persons.Select(p=>p.Age);

然而,即使没有说太多,我也非常确定
.Select
仍然是一个循环,因此这样编写它不会真正获得任何性能。既然您提到了
Persons
是一个
IQueryable
,那么它也是来自数据库吗

var ageStats = from a in db.Ages
               where Persons.Select(p => p.Age).Contains(a.Age)
               select a;
一个
join
SelectMany
(转换为LINQ到SQL的连接)就足够了

加入:

var ageStats = from a in db.Ages
               join p in db.Persons on a.Age equals p.Age
               select a;
var ageStats = from a in db.Ages
               from p in db.Persons
               where a.Age == p.Age
               select a;
选择多个:

var ageStats = from a in db.Ages
               join p in db.Persons on a.Age equals p.Age
               select a;
var ageStats = from a in db.Ages
               from p in db.Persons
               where a.Age == p.Age
               select a;

Select(p=>p.Age)不会返回一个列表(或者为此在循环中执行任何操作)。如果您想要一个列表,您必须执行.ToList()。在那之前,它只是一个非枚举的可枚举项。很好的一点…我假设年龄在内存中…但问题不清楚。在这个例子中,在他们选择多个人之前,我不会查找年龄,所以我必须等待用户输入。