我有点卡住,我参加了一个新项目,但是由于查询,所以存在超时问题。
即使我尝试了多次,我也不知道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。
能帮我吗? 完成所有设置后,还有其他方法可以启动此查询吗?
答案 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();
我希望您觉得它有用