Linq to SQL Records, где дочерний идентификатор в списке - PullRequest
0 голосов
/ 30 августа 2009

У меня есть сайт, где у меня есть база данных людей, и у каждого человека может быть несколько интересов, которые обрабатываются через отношения один ко многим между таблицей лиц и таблицей интересов. На сайте я хочу иметь поиск, где вы можете иметь несколько вариантов выбора интересов, и пользователь может выбрать столько, сколько они хотят. То, что я хочу вернуть, - это набор записей всех лиц, которые имеют какие-либо интересы, содержащиеся в выбранных опциях. Мой код C # asp.net и выглядит примерно так:

personResults = (from p in data.Persons
                 orderby p.lastName, p.firstName
                 select p);

И я хочу добавить что-то вроде этого, хотя я знаю, что последняя строка в следующем коде полностью поддельная. Предположим, что это мой идентификатор множественного выбора.

List<int> interestIdList = new List<int>();
    if (interest.GetSelectedIndices().Length > 0) {
        foreach(int selectedIndex in interest.GetSelectedIndices()){
        interestIdList.Add(int.Parse(interest.Items[selectedIndex].Value));
    }
    personResults = personResults.Where(x => interestIdList.Contains(x.Interests[].interestID));
}

Проблема в том, что последняя строка кода. Поскольку x.Interests - это коллекция объектов интересов из базы данных, я не могу получить доступ к их интересам (как теперь работает код, который интересуется идентификаторами предметов, если у человека есть 5 интересов). Если это поможет, я могу использовать свой список интересов, чтобы создать список объектов интереса, но я все еще не могу понять, как создать запрос.

Еще раз, чтобы заявить о моей цели, я хочу, чтобы любой человек, у которого есть интерес, где идентификатор интереса находится в массиве InterestIdList. Они не все должны соответствовать; до тех пор, пока есть хотя бы одно общее значение, которое я хочу записать.

1 Ответ

1 голос
/ 31 августа 2009

Если в DBML установлены подходящие отношения между таблицей персон и таблицей PersonWithInterests и таблицей интересов, вы можете попробовать это:

ArrayList ids = new ArrayList();
foreach (int index in interest.GetSelectedIndices())
{
    ids.Add(interest.Items[index].Value);
}
string[] idArray = (string[])ids.ToArray(typeof(string));
var personsWithInterests = (from pi in data.PersonInterests where idArray.Contains(pi.Interest.Id.ToString()) select pi.Person).Distinct();
...