我嘗試在LINQ生成UNION
查詢:如何在LINQ中生成單一的UNION查詢?
var a = _aReposytory.GetAll().OrderByDescending(t => t.EndT).Take(100);
var b = _bReposytory.GetAll().OrderByDescending(t => t.EndT).Take(100);
var c = _cReposytory.GetAll().OrderByDescending(t => t.EndT).Take(100);
var d = _dReposytory.GetAll().OrderByDescending(t => t.EndT).Take(100);
var result = a.Cast<IEntity>().Union(b.Cast<IEntity>())
.Union(c.Cast<IEntity>()).Union(d.Cast<IEntity>()).ToList();
所有entityes繼承IEntity
接口,並具有相同的字段。 _aReposytory.GetAll()
,_bReposytory.GetAll()
等返回IQueryable<T>
。但是,當我試圖獲得結果時,我得到錯誤
The specified LINQ expression contains references to queries that are associated with different contexts.
它在使用如下因素UNION
邏輯i是作品。但這是四個查詢執行。
var union = new List<ICdcEntity>(a);
union.AddRange(b);
union.AddRange(c);
union.AddRange(d);
如何在LINQ中生成單個的UNION
查詢?
是否'_aReposytory.GetAll()'(以及其他方法)的返回'的IEnumerable'或'的IQueryable '? –
你的錯誤信息非常清楚。每個上下文都會從您的Linq查詢中生成SQL,但不能從4種不同的上下文中生成單個SQL語句。即使可以,也會導致四個查詢。 – oerkelens
我相信這裏的答案正確地解釋了您的錯誤:https://stackoverflow.com/a/38627389/3042383 – lancew