-1

セッションに値を格納するために VS2010 Entity Framework を使用しています。以下の構文を使用します。

    private IEnumerable _TransactionItem2
    {
      get
        {
         var msg = HttpContext.Current.Session["SESSION_MESSAGES_NAME"] as IEnumerable;
            if (msg == null)
            {
                msg = new BOMDetailController().GetSearchData(0, 0);
                HttpContext.Current.Session["SESSION_MESSAGES_NAME"] = msg;
            }
            return msg;
        }
      set
        {
            Session[_MenuName + "TransactionItem"] = value;
        }
    }

以下のセッション初期化方法:

 public IEnumerable GetSearchData(int companyID = 0, long bOMID = 0)
        {
            var itemBrand = (from p in this.controllerCMN.Context.CmnItemBrands where p.IsDeleted == false select p).AsEnumerable();
            var itemColor = (from p in this.controllerCMN.Context.CmnItemColors where p.IsDeleted == false select p).AsEnumerable();
            var itemMaster = (from p in this.controllerCMN.Context.CmnItemMasters where p.IsDeleted == false select p).AsEnumerable();
            var itemSpecificationMaster = (from p in this.controllerCMN.Context.CmnItemSpecificationMasters where p.IsDeleted == false select p).AsEnumerable();
            var itemStyleMaster = (from p in this.controllerCMN.Context.CmnItemStyleMasters where p.IsDeleted == false select p).AsEnumerable();
            var uOM = (from p in this.controllerCMN.Context.CmnUOMs where p.IsDeleted == false select p).AsEnumerable();
            var bnOMMaster = (from p in this.Context.PlnBOMMasters where p.IsDeleted == false && p.CompanyID == companyID select p).AsEnumerable();
            var prdPhase = (from p in this.Context.PlnPrdPhases where p.IsDeleted == false && p.ComapnyID == companyID select p).AsEnumerable();
            var prdTask = (from p in this.Context.PlnPrdTasks where p.IsDeleted == false && p.ComapnyID == companyID select p).AsEnumerable();
            var bOMDetail = (from p in this.Context.PlnBOMDetails where p.IsDeleted == false && p.CompanyID == companyID select p).AsEnumerable();

            var query = from p in bOMDetail
                        select new
                        {
                            BOMDetailRecordID = p.BOMDetailRecordID,
                            CustomCode = p.CustomCode,
                            BOMID = p.BOMID,
                            BOMName = (from q in bnOMMaster where q.BOMID == p.BOMID select q.Description).FirstOrDefault(),
                            PhaseID = p.PhaseID,
                            PhaseName = (from q in prdPhase where q.PhaseID == p.PhaseID select q.PhaseName).FirstOrDefault(),
                            ItemID = p.ItemID,
                            ItemName = (from q in itemMaster where q.ItemID == p.ItemID select q.ItemName).FirstOrDefault(),
                            ColorID = p.ColorID,
                            ColorName = (from q in itemColor where q.ColorID == p.ColorID select q.ColorName).FirstOrDefault(),
                            StyleID = p.StyleID,
                            StyleName = (from q in itemStyleMaster where q.StyleID == p.StyleID select q.StyleName).FirstOrDefault(),
                            ItemSpecificationID = p.ItemSpecificationID,
                            ItemSpecificationName = (from q in itemSpecificationMaster where q.ItemSpecificationID == p.ItemSpecificationID select q.Description).FirstOrDefault(),
                            ItemBrandID = p.ItemBrandID,
                            BrandName = (from q in itemBrand where q.ItemBrandID == p.ItemBrandID select q.ItemBrandName).FirstOrDefault(),
                            UOMID = p.UOMID,
                            UOMName = (from q in uOM where q.UOMID == p.UOMID select q.UOMName).FirstOrDefault(),
                            ItemQty = p.ItemQty,
                            UnitPrice = p.UnitPrice,
                            StatusID = p.StatusID,
                        };

            return query.WhereIf(bOMID != 0, p => p.BOMID == bOMID).OrderByDescending(w => w.BOMDetailRecordID);

        }

上記のプロパティを照会したいTransactionItem2

1) 敷地内のアイテム数を数えたいTransactionItem2

`TransactionItem2.AsQueryable().Count()`

2) 次のようにクエリを実行したい:

var entity = _ TransactionItem2.SingleOrDefault(item => item.BOMDetailRecordID == childRecordID);

3) クエリを使用したい

var entity = _ TransactionItem2.Where(item => item.BOMDetailRecordID == childRecordID);

私の拡張方法は

    public static TSource Single<TSource>(this IEnumerable source)
    {
        return source.Cast<TSource>().Single();
    }

    public static TSource Single<TSource>(this IEnumerable source, Func<TSource, bool> predicate)
    {
        return source.Cast<TSource>().Single(predicate);
    }

    public static TSource SingleOrDefault<TSource>(this IEnumerable source)
    {
       return source.Cast<TSource>().SingleOrDefault();
    }

    public static TSource SingleOrDefault<TSource>(this IEnumerable source, Func<TSource, bool> predicate)
    {
       return source.Cast<TSource>().SingleOrDefault(predicate);
    }

作業構文:

var entity = _TransactionItem2.SingleOrDefault(item => item.BOMDetailRecordID == childRecordID);

上記の構文は、エラー メッセージを示しています。

「使用法から推測することはできません。型引数を明示的に指定してみてください」</p>

上記の構文は、プロパティでは機能しませんTransactionItem2。1、2、3 が機能しないのはなぜですか?

4

1 に答える 1

0

TSourceメソッドを呼び出すときに明示的に指定する必要があります。

var entity = _TransactionItem2.SingleOrDefault<EntityClass>(item => item.BOMDetailRecordID == childRecordID);
于 2013-04-17T05:29:07.160 に答える