帖子編輯LINQ查詢表達式重用
這將是可能的嗎?
有預編譯
即
private static Func<SmwrDataContext, int, IQueryable<Xyz>> _validXyzs =
CompiledQuery.Compile((Context context, int Id) =>
from xyz in _db.XYZs
join abc in _db.ABCs on xyz.Id equals abc.Id
where xyz.TypeId = id && xyz.Flag && abc.Flag
select xyz);
我最初同一個版本庫中直接訪問其內聲明此查詢表達式,曾在消費它沒有問題。
public List<MyItem> GetItemsForValueRange(int xyzTypeId, double floor, double ceiling)
{
return (from xyx from _validXyzs (_db, xyzTypeId)
join num from _db.numbers xyz.ID equals num.lettersId
where
num.Value >= floor && num.Value <= ceiling
num.Flag
select new {
Name = xyz.Name,
Value = num.Value
}).ToList();
}
後來重構靜態變量入不同的類爲相同的查詢是由多個存儲庫comsumed,
宣言交重構如下(_filteredXyzs)駐留在同一類作爲方法使其可用於消費。
Public static IQueryable<Xyz> GetValidXyzs(Context context, int xyzTypeId)
{
return from _filteredXyzs(context, id);
}
當時消耗其張貼重構爲[RepositoryName]任何特定的查詢上下文內.GetValidXyzs,但具有下列 落得「System.StackOverflowException」發生在System.Data.Linq.dll」
Xyz實體基於頂部,其可用性由主表中其他類型的標誌確定。由於在許多地方使用Xyz,爲了獲得更好的性能,我對該查詢進行了預編譯,只是想集中這個方面,使其更易於維護。
當我逐步調試時,靜態方法在沒有任何錯誤的情況下退出,但在下一步即退出,即加入和評估失敗。所以我有點難以解決如何解決這個問題?
我錯別字&任何其他不正確的推論就我所知WRT C#遺憾和LINQ是有限的,
PS:在阿里納斯Linq2Action建議靜態字段與非靜態方法
任何幫助將不勝感激
什麼是完整的簽名?提供關於如何將代碼組織到單獨的類和方法中的更多細節。 – 2009-11-28 16:13:01