Linq 子查询同一表

本文关键字:查询 Linq | 更新日期: 2023-09-27 18:32:38

我有一个包含 Id 和 CategoryId 的表。

我需要从该表中获取与给定 ID 具有相同 CategoryId 的所有记录。

这就是我想到的:

var query = from x in erm.Projects
            where x.CategoryId == erm.Projects.Where(y => y.Id == lookId).FirstOrDefault().CategoryId
            select x;

执行此查询的最佳方法是什么?

谢谢

Linq 子查询同一表

您可以使用联接来执行此类操作。还具有避免NullReferenceException的优点,如果FirstOrDefault()返回 null 并且您盲目调用.CategoryId

var query = erm.Table.Join(erm.Projects.Where(y => y.Id == lookId), x => x.CategoryId, y => y.CategoryId, (x,y) => x);
int catId = erm.Projects.Where(y => y.Id == lookId).FirstOrDefault().CategoryId;
var results = erm.Table
             .Where(x=> x.CategoryId == catId)
             .ToList();

或;

var query = from t in erm.Table join p in erm.Projects
                 on t.CategoryId equals p.CategoryId
            where p.CategoryId = lookId
            select t;
你可以

用这种方式。

var categoryId= erm.Projects.FirstOrDefault(y => y.Id == lookId).CategoryId;
var results = erm.Table
             .Where(x=> x.CategoryId == categoryId)
             .ToList();