Ускорить Linq Query - PullRequest
       14

Ускорить Linq Query

1 голос
/ 19 января 2011

Моя классовая структура выглядит следующим образом

public class Email 
{
    public string Subject {get;set;}
    public string Message {get;set;}
    public Contact Sender {get;set;}
    public string SenderEmail {get;set;}
}
public class Contact
{
    public string Email {get;set;}
    public string Name {get;set;}
}

, и я запускаю свой запрос Linq из двух частей. Сначала я выбираю все электронные письма.

var query = from msg in context.Email
            select msg;

Затем я назначаю контактную информациюк классу электронной почты

List<Email> outputList = new List<Email>();
foreach (var item in query.ToList())
{
    var q = from contact in context.Contact
            where contact.Email = item.SenderEmail
            select contact;
    item.Sender = q.SingleOrDefault();
    outputList.Add(item);
}


return outputList;

Есть ли возможность выполнить запрос на соединение и просто вывести список без необходимости выполнять несколько запросов

Ответы [ 2 ]

2 голосов
/ 19 января 2011

Я думаю, что это поможет (предупреждение: непроверенный код):

    var qry = from email in context.Email
              join contact in context.Contact 
              on email.SenderEmail equals contact.Email
              into contacts
              select new { eml = email, sender = contacts.FirstOrDefault() };

    var items = qry.ToList();

    foreach (var item in items)
    {
        item.eml.Sender = item.sender;
        outputList.Add(item.eml);
    }

    return outputList;
2 голосов
/ 19 января 2011

Я подозреваю, что это должно работать:

var query = from msg in context.Email
            join contact in context.Contact 
                 on msg.SenderEmail equals contact.Email
                 into contacts
            select new { msg, contacts };

var list = query.ToList();
foreach (var pair in list)
{
    pair.msg.Sender = pair.contacts.FirstOrDefault();
}

var messages = list.Select(pair => pair.msg);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...