如何使用linq改善查询

时间:2019-01-24 18:15:28

标签: c# mysql sql linq

我有点卡住,我参加了一个新项目,但是由于查询,所以存在超时问题。

即使我尝试了多次,我也不知道linq中改进一个查询的语法。

查询是:

var contactslist = (User as CustomPrincipal).contacts;

            var contacts = from m in db.ADDR_DEST.toList()
                           from n in contactslist
                           where m.ADDR_COUNTRY == n.country &&  m.ADDR_TPL_TYPE   == n.tpl_type
                           select m;

但是我不想在我有不同的参数之前不启动此查询,所以我删除了.toList()以使用

添加一些条件
contacts.where(..);

然后我想启动查询,但是类型为必须为列表的错误<>,但是在这种情况下,它是一个Iqueryable。

能帮我吗? 完成所有设置后,还有其他方法可以启动此查询吗?

2 个答案:

答案 0 :(得分:0)

尝试(未测试):

var contacts = db.ADDR_DEST.Where(m => m.COUNTRY == contactslist.country
                                  && m.ADDR_TPL_TYPE == contactslist.tpl_type)
                            .ToList();

如果contactslist是列表,请尝试以下

var contacts = (from addr in db.ADDR_DEST
                join cl in contactslist on
                   new {addr.COUNTRY, addr.ADDR_TPL_TYPE} equals new {cl.country, cl.tpl_type}
                select new {addr})
                .ToList();

Linq连接比同等的lambda更容易理解!

有一些很好的例子here

答案 1 :(得分:0)

您可以执行以下操作:

db.ADDR_DEST.Join(contactslist, 
                  addr => new { country = addr.ADDR_COUNTRY, type = addr.ADDR_TPL_TYPE }, 
                  cont => new { country = cont.country, type = cont.tpl_type }, 
                  (addr, cont) => addr)
            .ToList();

然后,如果要选择满足某些要求的联系人列表:

db.ADDR_DEST.Join(contactslist.Where(...).ToList(), 
                  addr => new { country = addr.ADDR_COUNTRY, type = addr.ADDR_TPL_TYPE }, 
                  cont => new { country = cont.country, type = cont.tpl_type }, 
                  (addr, cont) => addr)
            .ToList();

我希望您觉得它有用