C# 在Linq到Sql中使用本地序列进行左外连接
我需要绕过不能在Linq到Sql限制中使用的本地序列,执行左外部联接。左侧外部联接应返回IQueryable 下面是一个示例代码:C# 在Linq到Sql中使用本地序列进行左外连接,c#,linq,linq-to-sql,left-join,C#,Linq,Linq To Sql,Left Join,我需要绕过不能在Linq到Sql限制中使用的本地序列,执行左外部联接。左侧外部联接应返回IQueryable 下面是一个示例代码: public IQueryable<MyContainer> LeftOuter(IQueryable<MyContainer> query, List<Guid> myIds) { var leftOuterQuery = from container in query
public IQueryable<MyContainer> LeftOuter(IQueryable<MyContainer> query, List<Guid> myIds)
{
var leftOuterQuery =
from container in query
/* Exception --> */ from id in myIds.Where(myId => container.ContainerId == myId).DefaultIfEmpty()
select new { Container = container, Id = id };
return leftOuterQuery.Where(joined => joined.Container.ContainerId == null)
.Select(joined => joined.Container);
}
您是否尝试过从query.ToList中的容器中删除记录?我不想具体化这些记录可能会导致OutOfMemory异常。我从MyID中的id计算。将其锁定到内存的位在哪里?您是否尝试查找MyID中包含的id?这不是类似于query.WheremyIds.containerscontainer.ContainerId吗?你能描述一下你想用一个小数据集实现什么吗?@Adam Benson,函数返回的查询对象应该是传入查询对象的过滤版本。假设对传递的查询调用ToList返回10k个对象,并假设MyID包含前1k个对象的ID,则对返回的查询调用ToList应返回其他9k个对象。请注意,我可以执行查询。其中!但我认为它效率不高,因此更喜欢左连接并调用where select,如上面的代码所示