3

私は WCF Web サービスを開発しており、ADO.Net エンティティを使用してデータベースにアクセスしています。

このメソッドを使用して、一部の Database オブジェクトを Contract オブジェクトに変換します。

public static List<BlockContract> FormBlocks(int formId)
{
    List<BlockContract> blocksList = null;

    using (var vAdmEntities = new ADMDatabase.ADMEntities())
    {
        var blockEntities = from f in vAdmEntities.Form
                        where f.formId == formId
                        select f.Block;
        if (blockEntities != null)
        {
            blocksList = new List<BlockContract>(blockEntities.Count());
            foreach (ADMDatabase.Block b in blockEntities)
            {
                BlockContract blockContract = new BlockContract
                {
                    blockId = b.blockId,
                    name = b.name,
                    orderInForm = b.orderInForm
                };
                blocksList.Add(blockContract);
            }
        }
    }

    return blocksList;
}

ここでforeach (ADMDatabase.Block b in blockEntities)、エラーが発生します。

Cannot convert type 'System.Data.Objects.DataClasses.EntityCollection<ADMDatabase.Block>' to 'ADMDatabase.Block'

このエラーを解決するにはどうすればよいですか?

4

1 に答える 1

2

ループを変更する必要があります。

foreach (var blockItems in blockEntities){
     foreach (ADMDatabase.Block b in blockItems)
            {
                BlockContract blockContract = new BlockContract
                {
                    blockId = b.blockId,
                    name = b.name,
                    orderInForm = b.orderInForm
                };
                blocksList.Add(blockContract);
            }
}

次のブロックエンティティを選択しています。

var blockEntities = from f in vAdmEntities.Form
                        where f.formId == formId
                        select f.Block;

ここで blockEntities をデバッグすると、Form.Block はブロック項目のリストであるため、リストのリストのようなものになります。

于 2012-04-10T10:33:20.170 に答える