4

我有两个看起来像这样的表:

-- Houses
houseid personid
1       11
1       12
1       13
2       232
2       5533
2       40


-- People
personid person name
11       John
12       Jane
13       Zoe

和一堂课

class House
{
    List<string> people_name {get; set;};
}

我想返回一个对象,该对象House包含一个列表,上面列出了住在给定房子里的所有人的名字。我最接近实现它的是在 object 中返回一个 IQueryable House,因为您不能ToList从查询中调用:

LINQ to Entities does not recognize the method 'System.Collections.Generic.List`1[System.String]
ToList[String](System.Collections.Generic.IEnumerable`1[System.String])'
 method, and this method cannot be translated into a store expression.
4

1 回答 1

2

您可以在您的 select 语句中创建 House 对象。下面的代码创建了一个包含适当名称的 House 对象列表:

class Program
{
    static void Main(string[] args)
    {
        List<KeyValuePair<int, int>> housePersonPairs = new List<KeyValuePair<int, int>>();
        housePersonPairs.Add(new KeyValuePair<int, int>(1, 11));
        housePersonPairs.Add(new KeyValuePair<int, int>(1, 12));
        housePersonPairs.Add(new KeyValuePair<int, int>(1, 13));
        housePersonPairs.Add(new KeyValuePair<int, int>(2, 232));
        housePersonPairs.Add(new KeyValuePair<int, int>(2, 5533));
        housePersonPairs.Add(new KeyValuePair<int, int>(2, 40));

        List<Person> persons = new List<Person>();
        persons.Add(new Person() { ID = 11, Name = "John" });
        persons.Add(new Person() { ID = 12, Name = "Jane" });
        persons.Add(new Person() { ID = 13, Name = "Zoe" });
        persons.Add(new Person() { ID = 232, Name = "Name1" });
        persons.Add(new Person() { ID = 5533, Name = "Name2" });
        persons.Add(new Person() { ID = 40, Name = "Name3" });

        var houseAndNames = housePersonPairs.Join(
            persons,
            hpp => hpp.Value,
            p => p.ID, 
            (hpp, p) => new { HouseID = hpp.Key, Name = p.Name });

        var groupedNames = from hn in houseAndNames
                     group hn by hn.HouseID into groupOfNames
                     select groupOfNames.Select(x => x.Name).ToList();

        List<House> houses = groupedNames.Select(names => new House() { people_name = names }).ToList();

    }
}

public class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class House
{
    public List<string> people_name { get; set; }
}
于 2013-01-13T01:15:48.500 回答