2011-10-14 60 views
0

我已經建立了一個有很多參考的大程序。鐵:System.Linq.Dynamic的。在哪裏會被誤解

  • System.Data.DataSetExtensions
  • System.Linq.Dynamic

我已經寫了一個動態LINQ表達式:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

在我的情況下:

Dim query As IEnumerable = ds.Sales.Where(strWhere) 

但與System.Data.DataSetExtensionsWhere被曲解。編譯器期望(Datarow, Integer, Boolean)。如果我刪除System.Data.DataSetExtensions一切都可以用這個表達式,但我得到很多其他錯誤,所以我需要這個參考。

我該怎麼做才能正確解釋Where

回答

2

大程序是否在一個文件中?

如果尚未完成,請將您的程序拆分爲類,然後將每個類放入它自己的文件中。然後只在每個文件中使用必需的引用。

也許這樣你就可以解決命名空間的衝突。

如果由於某種原因,您絕對需要兩個衝突的命名空間,並且無法解決歧義,則可以直接調用擴展方法。基本上擴展方法只是另一個類的另一個靜態方法。 ds.Sales.Where(strWhere)只是該方法調用的語法糖。

一個例子:

ds.Sales.AsEnumerable().Where(yourCondition) 

將轉化

EnumerableRowCollectionExtensions.Where(ds.Sales.AsEnumerable(), yourCondition) 
+0

這是不可能的,我的程序分成不同的類,因爲我需要System.Data.DataSetExtensions本分。如果我將Linq Expression中的數據錶轉移到此類以外的其他子表中,它將需要太多內存。是否可以停用DataSetExtensions中的「where」? – Xennon

+0

我不明白你的意思是「如果你傳輸數據表太多,內存太多」。只需以數據表作爲參數調用另一個類的方法,不會複製表或以其他方式佔用內存。確切地說,即使使用Where-Extension,也沒有別的辦法,只是在不同的類上調用靜態方法,並將數據表作爲參數傳遞。 –

+0

感謝您的努力。 你的意思是這樣的嗎? 'ds.Sales.System.Linq.Dynamic.Where(strWhere)' 我已經試過沒有成功。 – Xennon