首页 > 解决方案 > 如何使用 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。

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

标签: c#mysqlsqllinq

解决方案


你可以这样做:

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();

希望对你有帮助


推荐阅读