EF lambda 匹配数组的多条件查询数据库

sun_well 2021-04-08 11:08:54
例如我有一个列表testList
public class testList
{
public string name {get;set;}
public string code {get;set;}
}

我想去数据库找同时匹配name和code的行
写成
db.where(m=>testList.contains(new {m.name,m.code}))
或者
db.where(m=>testList.any(any=>any.name==m.name&&any.code==m.code))
EF会抛出无法翻译的异常

我现在都是
var queryList=db.where(m=>m.testList.select(s=>s.name).contains(m.name)&&m.testList.select(s=>s.code).contains(m.code)).toList();
var result=queryList.where(m=>testList.contains(new {m.name,m.code}))
这样在筛选两次,感觉效率很低

想在数据库进行一次查询应该怎么写
...全文
3221 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun_well 2021-04-08
  • 打赏
  • 举报
回复
引用 2 楼 死亡中的独行者 的回复:
试试这样呢 db.where(m=>testList.Select(p=>p.name+p.code).Contains(m.name+m.code))
还没试,不过这样的处理方式并不严谨啊,a,bc和ab,c满足条件但并不是想要的
sun_well 2021-04-08
  • 打赏
  • 举报
回复
引用 1 楼 Logerlink 的回复:
db.AsEnumerable().where(m=>testList.any(any=>any.name==m.name&&any.code==m.code)) 不过表数据多时会慢
本身是想优化一下的,如果慢的话那肯定就不行了。
  • 打赏
  • 举报
回复
试试这样呢 db.where(m=>testList.Select(p=>p.name+p.code).Contains(m.name+m.code))
Logerlink 2021-04-08
  • 打赏
  • 举报
回复
db.AsEnumerable().where(m=>testList.any(any=>any.name==m.name&&any.code==m.code)) 不过表数据多时会慢

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧