[英]Speed up Linq Query
I have my class structure as follows 我的班级结构如下
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;}
}
and I run my Linq query in two parts First i select all the emails. 我分两部分运行我的Linq查询首先我选择所有的电子邮件。
var query = from msg in context.Email
select msg;
Then i assign the Contact details to the Email Class 然后我将联系人详细信息分配给电子邮件类
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;
Is there anyway i can run a join query and simply output the List without having to run multiple queries 无论如何,我可以运行连接查询,只需输出List而不必运行多个查询
I suspect this should work: 我怀疑这应该有效:
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);
This uses a group join. 这使用组连接。 You haven't said which LINQ provider you're using, but I expect it should work for most providers... 您还没有说过您正在使用哪个LINQ提供商,但我希望它适用于大多数提供商......
I think this would do the trick (warning: untested code): 我认为这样可以解决问题(警告:未经测试的代码):
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.