如何使用list<>遍历查询结果的LINQ结果在C#中

时间:2013-12-05 01:12:44

标签: c# asp.net linq entity-framework ienumerable

对于C#中的LINQ和实体框架来说还是比较新的,并且在解释为什么我似乎无法迭代作为List<>的非常基本的Where命令输出的结果时。我在类中有以下方法来返回结果(为简单起见,我在我的示例中使用了泛型变量名称):

public List<MyTable> GetMyList(int ThisID)
{
    return MyEntities.MyTable.Where(c => c.ForeignKey == ThisID).AsEnumerable().ToList();
}

然后在我的页面代码中,我有以下内容来调用并遍历结果:

List<MyTable> Table1 = GetMyList(1);
Table1.ForEach(delegate(MyTable TableDelegate)
{
    string Value = TableDelegate.Column1
});

除了非常重要的一点,“Column1的值永远不会改变之外,这一切都有效。在我正在处理的示例中,我使用我知道返回3条记录的值(在示例中为“ForeignKey”)提交查询,对于这3条记录,我知道“{{1每个人都有所不同。然而,我得到的是第一条记录的3个实例。即,“Column1的值不会随着“ForEach”迭代而改变。我已经确认它正在使用断点正确迭代。

我尝试了不同的构造循环的方法,包括正常的Column1语句,以及使用foreach for索引Count的标准Table1语句限制。相同的结果。

抓我的头......

3 个答案:

答案 0 :(得分:1)

我不确定你想要完成什么,所以希望这至少有帮助。我更改了一些名称,以便更容易理解:

public void MyMethod()
{
    // get records with the id 4
    var myList = GetMyList(4);

    // get the property called Column1 for each one of those records and add them to this list (for demonstration)
    var listOfColumn1 = new List<string>(); // lets assume that column holds a string
    foreach(User usr in myList)
    {
        listOfColumn1.Add(thing);
    }

    // or in a more linq-ish way
    listOfColumn1 = myList.Select(record => record.Column1).ToList();

}

public List<User> GetMyList(int departmentId)
{
    // return a list of users that have the specified department id
    return MyEntities.Users.Where(user => user.DepartmentId== departmentId).ToList();
}


// OR do it in one operation
public void DisplayDepartmentUsers(int departmentId)
{
    MyEntities.Users // from my user table
        .Where(user => user.DepartmentId == departmentId) // get everyone with this department id
        .Select(record => record.Column1) // only select the first column (a string in this case)
        .ToList() // make a list out of the resultant enumerable
        .ForEach(Console.WriteLine); // for each result, run this method (write out to console)
}

答案 1 :(得分:0)

我不认为这与你的问题有关,但我认为它会帮助你理解LINQ:

public List<MyTable> GetMyList(int ThisID)`
{
    return MyEntities.MyTable.Where(c => c.ForeignKey == ThisID).AsEnumerable().ToList();`
}

在此示例中,您不需要使用AsEnumerable,因为所有LINQ方法都返回IEnumerable<T>

答案 2 :(得分:0)

我弄清楚问题是什么。它与代码本身完全无关,这很好。我尝试查询的视图在输出中缺少唯一标识符列(PK列),如底层.edmx对象中所示。一旦我加入,没问题。 select查询现在可以获取唯一的行。对我来说这似乎有点奇怪,但你去了。