Linq-to-SQL ToDictionary - PullRequest
       33

Linq-to-SQL ToDictionary

2 голосов
/ 06 октября 2011

У меня есть следующий запрос LINQ:

var allocations = 
    from ta in dc.TransactionAllocations
    where ta.Allocated == false
    group ta by new { ta.ReceiptReference, ta.Customer } into tag
    select new
    {
        Customer = tag.Key.Customer,
        ReceiptReference = tag.Key.ReceiptReference,
        Invoices = tag.ToDictionary(a => new AllocationDictionaryKey()
            {
                ID = a.ID, 
                InvoiceReference = a.InvoiceReference 
            }, 
            a => a.Amount)
    }

Но когда я пытаюсь выполнить это, вызов ToDictionary не выполняется, поскольку он не поддерживается оператором LINQ-to-SQL.Единственный способ обойти это, как я видел, - это вызвать ToDictionary в конце запроса, но я хочу, чтобы только одно свойство моего анонимного типа было словарём!

Есть идеи, как это сделать?

Ответы [ 2 ]

3 голосов
/ 06 октября 2011

Посмотрите на использование AsEnumerable.Это предназначено для обхода операторов, которые не поддерживаются конкретной платформой.Это означает, что данные будут обрабатываться там, где находится код, а не там, где данные.

Invoices = tag.AsEnumerable().ToDictionary(a => new AllocationDictionaryKey() { ID = a.ID, InvoiceReference = a.InvoiceReference }, a => a.Amount)
2 голосов
/ 04 октября 2012

Довольно старый, но здесь идет.Я решил свою проблему с помощью

 from ta in dc.TransactionAllocations.AsEnumerable()

, то есть, прямо сделав datatable как Enumerable.

...