c# - 如何从两个表中获取数据并将其保存在 Net Core Entity Framework 中的 DTO 中?
问题描述
我只是在示例中解释这一点,假设我有两个表,字段和模块字段
field
id name ismodule
1 Firstname 1
2 Lastname 0
modulefield
id moduleid fieldid
1 22 1
这是我的数据库的简单表示。现在在 EF 中,我怎样才能得到这些列的一行
modulefield.moduleid field.id field.name
22 1 Firstname
基本上,如果 field.ismodule 为真,我只想获取 modulefield.moduleid。
我认为的等效 sql 脚本是
SELECT b.submoduleid, a.* FROM field a, modulefield b;
我当前的代码是这个(片段)
var result = new List<FieldDTO>();
var fields = await _repo.GetAsync<Field>();
result = _mapper.Map<List<FieldDTO>>(fields);
解决方案
您可以使用linq join直接返回 a List<FieldDTO>
。
var result = (from e in _context.Fields
join mf in _context.ModuleFields on e.Id equals mf.FieldId
where e.IsModule == 1
select new FieldDTO
{
ModulefieldModuleid = mf.ModuleId,
FieldId = e.Id,
FieldName=e.Name
}).ToList();
推荐阅读
- c++ - 在 MacOS 上使用 CLion 编译 32 位 C++ 程序
- reactjs - borderBottomRightRadius 在 React Native 中不起作用
- python - OpenCV Python中的视频文件与实时网络摄像头提要窗口大小
- java - 在android中使用日志调试的正确方法?断点
- c# - “SettingsViewModel”类型不包括任何可访问的构造函数。有没有办法摆脱这个错误?
- sqlite - 如何删除sqlite3中数据库的所有文件?
- ios - 如何创建轮播视图
- java - 在执行实际操作之前对 Web 元素进行一些标准验证
- java - 不了解 Java 中的一些基本编译错误
- cassandra-3.0 - Cassandra 数据类型持续时间在 sstableloader 中失败