不,仅使用一个简单的 Linq-to-Sql 查询是不可能实现您想要的。您将不得不解决它,并且很难以通用的方式做到这一点。
但是,如果您只想连接来自 DB 的结果和添加到 DataContext 的实体,那么这样的事情怎么样:
代替:
db.Orders.Where (o => o.OrderDate > DateTime.Now);
你写:
// Or put the method on DataContext as an extension method
var queryFunc = GetCombinedQuery (db, d => d.Orders, os => os.Where (o => o.OrderDate > DateTime.Now));
使用以下助手:
IQueryable<TResult> GetCombinedQuery<T, TResult> (DataContext dataContext, Func<DataContext, IQueryable<T>> dbQueryableProvider, Func<IQueryable<T>, IQueryable<TResult>> queryProvider)
{
var dbDataSource = dbQueryableProvider (dataContext);
var dbQuery = queryProvider (dbDataSource);
var inMemorySource = dataContext.GetObjectStateEntries (EntityState.Added).Select (e => e.Entity).OfType<T>();
var inMemoryQuery = queryProvider (inMemorySource);
return dbQuery.Concat (inMemoryQuery);
}