0

こんにちは、Linq とエンティティ フレームワークは初めてです。私は3つのビューモデルを持っています:

1.

public class FlowViewModel
{
   ..........................
    public List<FlowLevelViewModel> Levels { get; set; }
}

public class FlowLevelViewModel
{
    .........................
    public List<BlockDetailsViewmodel> Blocks { get; set; }
}
public class BlockDetailsViewmodel
{
    .......................
}

コントローラーからデータレイヤーを呼び出しています。

var model = new FlowViewModel();
        model = dataOb.GetFlowForTheDocument(company, docType);
        model = dataOb.GetFlowStageForTheDocument(model);
        return model;

そして私のデータレイヤーで

    public FlowViewModel GetFlowStageForTheDocument(FlowViewModel model)
    {
        var flowlevelviewModel = (from p in dbContext.FlowStages 
                             where p.FlowID == model.FlowId 
                             select new FlowLevelViewModel()
                              {
                               .................
                         Blocks = GetBlockDetailsForTheDocument(p.StageID, .StageType)
                              }).ToList();

        model.Levels = flowlevelviewModel;
        return model;
    }
    public List<BlockDetailsViewmodel> GetBlockDetailsForTheDocument(int StageID, string stageType)
    {
        var blockDetails = new List<BlockDetailsViewmodel>();
        ......................................
        return blockDetails;
    }

プログラムを実行しているときに、次のエラーが発生します。

**NotSupportedException Was unhandled by user Code**
    LINQ to Entities does not recognize the method 'System.Collections.Generic.List`1[SEADViewModel.BlockDetailsViewmodel] GetBlockDetailsForTheDocument(Int32, System.String)' method, and this method cannot be translated into a store expression.

私のプロジェクトは制作段階にあるため、まったく時間がありません。私が間違っていることを誰かが知っていますか?

4

2 に答える 2

1

これで問題が解決するはずです:

var data = (from p in dbContext.FlowStages 
                             where p.FlowID == model.FlowId 
                             select p).ToList();
var flowlevelviewModel = (from p in data
                          select new FlowLevelViewModel()
                              {
                               .................
                         Blocks = GetBlockDetailsForTheDocument(p.StageID, .StageType)
                              }).ToList();

これは最初にクエリを評価することに注意してくださいToList()。クエリ全体を一度に実行する必要がある場合は、単純な LINQ 式を作成する必要があり GetBlockDetailsForTheDocumentます。クエリ内でメソッドを使用することはできません。サポートされている組み込みメソッドへのリンクについては、@Tilak の回答を参照してください。

于 2012-12-28T19:47:45.413 に答える
0

Linq to Entitiesを使用しています。

すべての機能をサポートしているわけではありません。サポートされている機能とサポートされていない機能のリスト

LINQ クエリで使用するには、カスタム モデル定義関数 を記述する必要があります。GetBlockDetailsForTheDocument

于 2012-12-28T19:40:56.757 に答える