Linq to sql for…each循环是从自定义对象的IQueryable中提取基本体列表的最佳方法吗?
例如,如果我有一个Person对象的IQueryable,每个人都有一个年龄ID,我想进行另一个查询,从一个包含整数ID的表中选择所有行,该整数ID在此IQueryable ID中 我可以用这样的东西吗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
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()。在那之前,它只是一个非枚举的可枚举项。很好的一点…我假设年龄在内存中…但问题不清楚。在这个例子中,在他们选择多个人之前,我不会查找年龄,所以我必须等待用户输入。