Проблемы с приведением LinQ к строго типизированной коллекции - PullRequest
1 голос
/ 22 октября 2010

Полагаю, это тривиально, но не для меня.

У меня есть коллекция MembershipUserCollection.Я хотел выполнить над ним какой-нибудь запрос Linq, поэтому я использовал метод OfType<MembershipUser>(), а затем применил к нему Where().Однако я не знаю, как вернуть свои результаты в MembershipUserCollection?

Это мой код:

MembershipUserCollection Users;
Users = GetAllUsers(pageIndex, pageSize, out totalRecords).OfType<MembershipUser>().Where(user => user.Email == emailToMatch); //how to cast it back to MembershipUserCollection ?

GetAllUsers(pageIndex, pageSize, out totalRecords) возвращает MembershipUserCollection

Спасибо за ваше время.

Ответы [ 3 ]

1 голос
/ 22 октября 2010

Я не думаю, что вы можете сделать это в самом запросе, но вы должны быть в состоянии сделать это:

var query = GetAllUsers(pageIndex, pageSize, out totalRecords)
                .OfType<MembershipUser>()
                .Where(user => user.Email == emailToMatch);

var users = new MembershipUserCollection();
foreach (var user in query)
{
    users.Add(user);
}

(И, конечно, вы можете обернуть эту логику в метод расширения, если хотите, а затем вызвать метод расширения в запросе.)

0 голосов
/ 22 октября 2010

Так что это было тривиально, мне просто пришлось разыграть это так:

MembershipUserCollection Users;
Users = (MembershipUserCollection)GetAllUsers(pageIndex, pageSize, out totalRecords).OfType<MembershipUser>().Where(user => user.Email == emailToMatch).Cast<MembershipUser>();

Спасибо, ребята, за ваши ответы.

0 голосов
/ 22 октября 2010

Одно из возможных решений:

   var users = GetAllUsers(pageIndex, pageSize, out totalRecords)
      .OfType<MembershipUser>()
      .Where(user => user.Email == emailToMatch);

   MembershipUserCollection membershipUsers = new MembershipUserCollection();
   users
      .ToList()
      .ForEach(membershipUsers.Add);

Еще один с оператором foreach:

foreach (var user in users)
{
    membershipUsers.Add(user);
}
...