您的问题不是由加入或过滤引起的,而是由您的投影引起的。投影不应包含文档本身,这只是 MongoDB .Net 驱动程序不支持。
因此,在投影中不包含 col1 对象的以下查询将正常工作:
var appt = (from col1 in collection1.AsQueryable()
join col2 in collection2.AsQueryable() on col1.Id equals col2.RefKey into grp
select new
{
//col1,
filteredCol = col1.BandId == "" ? grp : grp.Where(t => t.Name == "Hello")
}).Take(10).ToList();
这里有几个可能的修复方法。最好的选择是在投影中不包括整个文档,而只包括进一步逻辑实际需要的字段,例如:
var appt = (from col1 in collection1.AsQueryable()
join col2 in collection2.AsQueryable() on col1.Id equals col2.RefKey into grp
select new
{
col1.Id,
col1.BandId,
filteredCol = col1.BandId == "" ? grp : grp.Where(t => t.Name == "Hello")
}).Take(10).ToList();
如果您需要文档对象本身,您可以使用 .AsEnumerable() 将整个集合获取到客户端,然后使用 LINQ to objects:
var appt = (from col1 in collection1.AsQueryable().AsEnumerable()
join col2 in collection2.AsQueryable() on col1.Id equals col2.RefKey into grp
select new
{
col1,
filteredCol = col1.BandId == "" ? grp : grp.Where(t => t.Name == "Hello")
}).Take(10).ToList();
将此方法用作最后一个选项,因为它对服务器和客户端的负载都很大。