for ...每个循环是从IQueryable自定义对象中提取基元列表的最佳方法吗?

时间:2011-11-11 19:12:28

标签: linq-to-sql

例如,如果我有一个IQ对象的Person对象,并且每个Person都有一个Age ID,我想创建另一个查询,从包含一个整数ID的表中选择所有行,该整数ID在这个IQueryable的ID中...... / p>

我可以使用这样的东西吗?

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;

或者什么是更好的方式,所以我不需要循环?

由于

3 个答案:

答案 0 :(得分:1)

听起来你想要进行连接。既然您提到PersonsIQueryable,它是否也来自数据库?

joinSelectMany(转换为LINQ to SQL中的连接)应该足够了。

<强>加入:

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

<强>的SelectMany:

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

答案 1 :(得分:0)

你可以做到

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

然而,即使msdn page for .Select没有说太多,我也很确定.Select仍然是一个循环,所以你不会通过这样写它来获得任何性能

答案 2 :(得分:0)

var ageStats = from a in db.Ages
               where Persons.Select(p => p.Age).Contains(a.Age)
               select a;