1

C# 4 と EF5 を使用します。

計算されたプロパティを合計しようとすると問題が発生する:

The specified type member 'QtyAvailable' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported.

プロパティの定義は次のとおりです。

public decimal QtyAvailable
    {
        get
        { return this.QtyInContainer - this.QtyAllocated; }
    }

これがLinqです:

var viewModel =
                companyItems
                        .GroupJoin(
                            inventory,
                            items => items.Id,
                            inven => inven.ItemId, (im, icd) => new { im, icd }
                            )
                        .SelectMany(
                            itemInven => itemInven.icd.DefaultIfEmpty(),
                            (im, icd) => new { im, icd }
                        )
                        .GroupBy(g => new
                            {
                                g.im.im.Id
                            }
                        )
                        .Select(group =>
                                new ItemAvailabilityViewModel()
                                {
                                    Id = group.Key.Id,
                                    QtyAvailable = group.Sum(jt => jt.icd == null ? 0 : jt.icd.QtyAvailable),
                                    UnitCashPrice = group.Max(jt => jt.im.im.UnitSellPrice),
                                    UnitCreditPrice = group.Max(jt => jt.im.im.UnitSellPrice * (1 + company.CashDiscountPct)),
                                    CustomerUnitPrice = group.Max(jt => jt.im.im.UnitSellPrice * (1 + decCreditPriceMarkup))
                                }
                        )
                        ;

この結果を達成する方法がわからない。どういうわけかこれを 2 つのクエリに分割する必要がありますか?

4

1 に答える 1

2

これを2つのクエリに分割することがチケットだったようです。私が推測していることから、最初に .ToList() を呼び出すと、計算されたプロパティが解決され、2 番目のクエリで計算されなくなり、合計されます。結果のコードは次のとおりです。

//join of Recpt Header and Detail
            var unGroupedJoin =
                companyItems
                        .GroupJoin(
                            inventory,
                            items => items.Id,
                            inven => inven.ItemId, (im, icd) => new { im, icd }
                            )
                        .SelectMany(
                            itemInven => itemInven.icd.DefaultIfEmpty(),
                            (im, icd) => new { im, icd }
                        ).ToList();

            var viewModel =
                unGroupedJoin
                        .GroupBy(g => new
                            {
                                g.im.im.Id
                            }
                        )
                        .Select(group =>
                                new ItemAvailabilityViewModel()
                                {
                                    Id = group.Key.Id,
                                    QtyAvailable = group.Sum(jt => jt.icd == null ? 0 : jt.icd.QtyAvailable),
                                    UnitCashPrice = group.Max(jt => jt.im.im.UnitSellPrice),
                                    UnitCreditPrice = group.Max(jt => jt.im.im.UnitSellPrice * (1 + company.CashDiscountPct)),
                                    CustomerUnitPrice = group.Max(jt => jt.im.im.UnitSellPrice * (1 + decCreditPriceMarkup))
                                }
                        ).ToList()
                        ;
于 2013-02-26T15:49:07.147 に答える