サードパーティのクラス (Kentico) で LINQ を使用することを計画していましたが、それができないようで、その理由がわかりません。私のコードは基本的に次のとおりです。
using System;
using System.Collections.Generic;
using System.Linq;
// some additional namespaces
namespace test
{
public partial class ProductFilter : CMSAbstractBaseFilterControl
{
protected IEnumerable<String> GetCategories(String parentName)
{
CategoryInfo info = CategoryInfoProvider.GetCategoryInfo(parentName, CMSContext.CurrentSite.SiteName);
var children = CategoryInfoProvider.GetChildCategories(info.CategoryID, null, null, -1, null, CMSContext.CurrentSite.SiteID);
children.ToArray();
}
}
この時点で、エラーが発生します
エラー 5 「CMS.SettingsProvider.InfoDataSet」には「ToArray」の定義が含まれておらず、タイプ「CMS.SettingsProvider.InfoDataSet」の最初の引数を受け入れる拡張メソッド「ToArray」が見つかりませんでした (using ディレクティブまたはアセンブリ参照?)
CategoryInfoProvider.GetChildCategories は次のように定義されています。
public static InfoDataSet<CategoryInfo> GetChildCategories(int categoryId, string where, string orderBy, int topN, string columns, int siteId);
InfoDataSet は次のように定義されます。
public class InfoDataSet<InfoType> : ObjectDataSet<BaseInfo>, IEnumerable<InfoType>, IInfoDataSet, IEnumerable where InfoType : CMS.SettingsProvider.BaseInfo, new()
{
public InfoDataSet();
public InfoDataSet(DataSet sourceData);
public InfoObjectCollection<InfoType> Items { get; protected set; }
protected InfoType Object { get; set; }
public InfoDataSet<InfoType> Clone();
public IEnumerator<InfoType> GetEnumerator();
public InfoType GetNewObject(DataRow dr);
protected override ObjectCollection<BaseInfo> NewCollection();
}
インターフェイスが正しく実装されているようです。LINQ 用の名前空間が含まれており、次のような呼び出しを行うことができList<int> i; i.ToArray();
ます。