4

次のような 2 つのテーブルがあります。

-- 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 に答える