2013-09-23 47 views
1

我有一个Id和CategoryId表。Linq Subquery同表

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

这是我走过来:

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

怎样做此查询的最佳方式?

谢谢

+0

你有什么问题使用该解决方案? – Servy

+0

另外,您使用的是哪种查询提供程序? – Servy

回答

0
int catId = erm.Projects.Where(y => y.Id == lookId).FirstOrDefault().CategoryId; 

var results = erm.Table 
      .Where(x=> x.CategoryId == catId) 
      .ToList(); 

OR;

var query = from t in erm.Table join p in erm.Projects 
       on t.CategoryId equals p.CategoryId 
      where p.CategoryId = lookId 
      select t; 
+0

lookId是Table.Id而不是Table.CategoryId –

+0

这是你在找什么? – Kaf

1

您可以使用连接来做这种事情。如果FirstOrDefault()返回null,并且您盲目地调用.CategoryId,则还具有避免NullReferenceException的优点。

var query = erm.Table.Join(erm.Projects.Where(y => y.Id == lookId), x => x.CategoryId, y => y.CategoryId, (x,y) => x); 
0

您可以使用这种方式。

var categoryId= erm.Projects.FirstOrDefault(y => y.Id == lookId).CategoryId; 

var results = erm.Table 
      .Where(x=> x.CategoryId == categoryId) 
      .ToList();