(Silverlight) Служба WCF, возвращающая LinkedList - PullRequest
0 голосов
/ 30 апреля 2011

Я вызываю табличную функцию моей базы данных в SQL Server 2008 из службы WCF и сохраняю ее результаты в LinkedList.С другой стороны, когда я вызываю этот сервис и получаю этот LinkedList, все узлы содержат одинаковое значение.Код, который я использую, выглядит следующим образом:

public class user
{
    public string name;
    public string email;
}

public class ChatService : IChatService
{

 public LinkedList<user> getOnlineList(string email)
    {
        LinkedList<user> online = new LinkedList<user>();
        JabsBaseDataContext db = new JabsBaseDataContext();
        IQueryable<onlineListResult> justOnline = db.onlineList(email);
        foreach (onlineListResult r in justOnline)
        {
            user os = new user()
            {
                name = r.fname + " " + r.lname,
                email = r.email
            };
            online.AddLast(os);
        }
        return online;
    }
}

chatService.getOnlineListCompleted += onlineRetrieved;
chatService.getOnlineListAsync(email);
void onlineRetrieved(object sender, getOnlineListCompletedEventArgs e)
{
   foreach(user us in e.Result)
   this.dispatcher.BeginInvoke(() => MessageBox.show(us.name+"\n"+us.email));
}

1 Ответ

0 голосов
/ 19 августа 2011

В onlineRetrieved измените код в цикле foreach, чтобы использовать локальную переменную для хранения пользователя и использовать ее.т. е. изменить

foreach(user us in e.Result)
   this.dispatcher.BeginInvoke(() => MessageBox.show(us.name+"\n"+us.email));

на

foreach(user us in e.Result)
{
 user currentUser = us;
   this.dispatcher.BeginInvoke(() => MessageBox.show(currentUser.name+"\n"+currentUser.email));
}

Поясните, почему это так - Проблема с делегатом-анонимом внутри foreach

...