c# - 使用返回选定字段并在两个查询中排序的子查询查询 linq
问题描述
我有两张桌子:
汽车
- carId (int) 主要
- 车名(varchar)
- carRegisterDate(日期)
相片
- 照片ID(整数)
- photoCarId (int) //Cars中cardId的外键
- photoSortId (int) //按int值对照片进行排序
- photoIsMain (bool) //判断它是否是主照片
- 照片名称(varchar)
我的目标是:
在 Cars 中执行查询,查询 n 条记录
对具有链接到汽车表的外键的照片表执行子查询。在这个查询中,我需要:
- 按 photoSortId 字段排序
- 在记录具有字段 photoIsMain == true 的单独字段中获取 photoName
- 计算照片项目总数
目前我正在使用汽车表中的查询返回一个集合并循环遍历它,并且对于每个汽车项目,我在照片表中创建一个查询,通过 photosSortId 字段排序并检查 photoIsMain 字段是否为真。
我将能够获取此类数据,仅使用 linq 对字段进行排序?如果我这样做,我会获得更快的性能吗?
目前我做类似的事情:
public class ListCars
{
public int CarId { get; set; }
public string CarName { get; set; }
public DateTime CarRegisterDate { get; set; }
public List<string> ListPhotos { get; set; }
public string MainPhoto { get; set; }
public int CarTotal { get; set; }
}
// First - query cars
var cars = await(from c in _db.Cars)
select new ListCars
{
CarId = c.carId
CarName = c.carName
CarRegisterDate = c.carRegisterDate
})
.AsNoTracking().Take(9)
.OrderByDescending(x => x.CarRegisterDate)
.ToListAsync();
// Loop foreach car
foreach (var carItem in cars)
{
//query photos
var photos = await(from p in _db.Photos
where p.photoCarId == carItem.CarId
orderby p.photoSortId
select new { p.photoName, p.photoIsMain }).AsNoTracking().ToListAsync();
//List for get
cars.ListPhotos = new List<string>();
foreach (var photoItem in photos)
{
//Count photos items
carItem.CarTotal++;
//check if is main
if (photoItem.photoIsMain)
{
carItem.MainPhoto = p.photoName;
}
//Add photoName to list
cars.ListPhotos.Add(p.photoName);
}
}
有没有更合适的方法?
解决方案
推荐阅读
- dynamic-programming - 运行时间 - 动态规划算法
- ios - 执行 segue 以使用户与帖子创建者聊天
- jquery - 在 laravel 中根据用户角色显示数据
- c - 为什么在 libc 中可以滥用宏
- php - 简单的用户管理,Symfony 4 教义错误
- php - 使用电子邮件 PHP 发送多个附件
- java - 实例初始化时类线程是否安全
- javascript - Javascript CSP 块
- react-native - createStackNavigator 中的 CreateDrawerNavigator
- python - 结果数组 skimage 方法 color.rgb2gray 有时未归一化