вернуть анонимный тип из скомпилированного запроса делегата - PullRequest
1 голос
/ 30 декабря 2011

Я хочу вернуть анонимный тип из скомпилированного запроса, который выбирает несколько столбцов из двух таблиц.

Я пытался использовать:

public static Func < DBEntities, string> 

но не в состоянии скомпилировать. Я попытался создать новый тип данных BOMWorkOrder , но не смог заставить его работать. Может быть, мне не хватает некоторого синтаксиса.

public static Func<DBEntities, string, IQueryable<BOMWorkOrder>> compiledWorkorderQuery =
        CompiledQuery.Compile((DBEntities ctx, string bomNumber) =>
            from items in ctx.BM10200 
            from orders in ctx.BM10300
            where orders.Parent_Component_ID == -1 &&
                    orders.ITEMNMBR == bomNumber &&
                    orders.TRX_ID == items.TRX_ID
            select new 
            {  bomWorkOrder =
                items.TRXDATE,
                orders.TRX_ID,
                orders.ITEMNMBR,
                orders.Assemble_Quantity
            });

где порядок работы будет:

public class BOMWorkOrder
{
    public DateTime TransactionDate { get; set; }
    public string TransactionId { get; set; }
    public string ItemNumber { get; set; }
    public int AssemblyQuantity { get; set; }
}

Ответы [ 3 ]

3 голосов
/ 30 декабря 2011

Поскольку вы создали тип BOMWorkOrder, используйте этот тип, а не анонимный:

... select new BOMWorkOrder 
    { 
        TransactionDate = items.TRXDATE,
        TransactionId = orders.TRX_ID,
        ItemNumber = orders.ITEMNMBR,
        AssemblyQuantity = orders.Assemble_Quantity
    };
0 голосов
/ 30 декабря 2011
    select new bomWorkOrder
    {  
        TransactionDate =items.TRXDATE,
        TransactionId =orders.TRX_ID,
        ItemNumber =orders.ITEMNMBR,
        AssemblyQuantity =orders.Assemble_Quantity
    });
0 голосов
/ 30 декабря 2011

Если вы вернете список анонимных объектов, вы не сможете получить доступ к свойствам (если не используете dynamic)

Вам просто не хватает имени типа в вашем select:

...
select new BOMWorkOrder
{
    TransactionData = items.TRXDATE,
    TransactionId = orders.TRX_ID,
    ItemNumber = orders.ITEMNBBR,
    AssemblyQuantity = orders.Assemble_Queantity,
}
...