我正在開發一個使用LinqToSQL的應用程序。作爲這個的一部分,我創建了一個整數列表,它們表示我想要篩選的鍵。在過去的每一次當我這樣做,並想加入我的列表和數據表我得到以下錯誤:LinqToSQL將本地列表連接到表 - 混淆
Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator
現在,這是很好的,因爲,我的理解是,這是一個limitaiton/LinqToSQl的功能。我一直在使用如圖所示,包含了我的查詢操作:
List<CargoProduct> cargoProducts = context.CargoProducts
.Where(cp => cargos.Contains(cp.CargoID))
.ToList();
最近,我遇到了2100項限制在包含,所以一直在尋找其他的方法來做到這一點,最終想出以下:
List<CargoProduct> cargoProducts = context.CargoProducts.AsEnumerable()
.Join(cargos, cp => cp.CargoID, c => c, (cp, c) => cp)
.ToList();
現在,這工作得很好,所以我組建了一個知識共享電子郵件的情況下,他們跨越這個限制附帶的其他開發商。我試圖讓錯誤信息等擺放在一起的另一個查詢比我期望的失敗:
List<CargoProduct> results = (from c in cargos
join cp in context.CargoProducts on c equals cp.CargoID
select cp).ToList();
出乎我的意料,這不僅不會引發錯誤,但它返回完全相同的結果作爲先前的查詢。那麼,我在這裏錯過了什麼?我相信這是顯而易見的事情!
僅供參考上下文是我LinqToSQl連接和貨物被實例化:
List<int> cargos = context.Cargos.Select(c => c.CargoID).ToList();
更新
正如它確實似乎是在我參加的東西的順序答覆中提到,作爲如果我用了那麼下面我得到預期的錯誤消息:
List<CargoProduct> test3 = (from cp in context.CargoProducts
join c in cargos on cp.CargoID equals c
select cp).ToList();
有趣的功能,我想我明白爲什麼它是做什麼ð OES。可能是一個很好的解決方法,而不是使用包含較小數據集的包含。
那麼,它允許你這樣做的原因是因爲你實際上並沒有傳入值,它查詢並返回整個表,然後從c#過濾它,而不是在SQL中過濾它。打開SQL分析器,看看它傳遞了什麼〜_〜) – Ricc