Как использовать вычисляемые поля в моем LightSwitch Query? - PullRequest
2 голосов
/ 01 марта 2012

в моем приложении lightwitch я пытаюсь создать экран клиентов для клиентов с балансовым значением, а мое значение баланса - это вычисляемое поле в объекте клиента

когда я пытался поместить логику в событие процесса запроса, как это

query =( from i in query

where(i.Balance>0)
select i );

я получаю исключение .. каков наилучший способ справиться с такими ситуациями ?? я видел ответ здесь но я не знал, как его реализовать, мне нужен пример кода, может ли кто-нибудь мне помочь ?? заранее спасибо

Ответы [ 2 ]

1 голос
/ 10 апреля 2012

Я на самом деле ищу решение этой проблемы (к сожалению, я не могу просто включить вычисление из вычисляемого поля, потому что в моем вычислении используется другое вычисляемое поле, которое использует рекурсию)

Пара указателейЯ подумал, что вам может пригодиться: @ julio.g - для обработчика события Executed параметр «result» является параметром IEnumerable (в отличие от обработчика события PreProcess_Query, где параметр «query» представляет собой ref IEnumerable), поэтому любые изменения, которые вы вносите в «результат», будут локальными только для этого метода

@ 3oon - afaik, представления SQL не поддерживаются в LightSwitch.Лучший вариант, с которым мне доводилось сталкиваться, - это создать службу RIA WCF на основе хранимой процедуры, а затем добавить ее в качестве источника данных.Этот пост должен помочь вам начать.http://tejana.wordpress.com/2010/12/09/microsoft-lightswitch-and-stored-procedures-using-wcf-ria-services/

Надеюсь, это поможет!

1 голос
/ 02 марта 2012

Запрос будет выполнен поставщиком данных, который не знает о вычисляемых полях.Что вы можете сделать, это отфильтровать то, что вы хотите через LINQ, ссылаясь на фактические поля, а не рассчитанные.

Например, допустим, сальдо - это рассчитанное вами поле, которое вы определили как Кредит - Дебет (которые являются обычными полями).Вы хотите, чтобы ваш запрос возвращал строки с Balance> 0. Вот как вы бы написали запрос (в событии PreprocessQuery обратите внимание, что нет события ProcessQuery):

partial void TestQuery_PreprocessQuery(ref IQueryable<Customer> query)
{
    query = (
        from c in query
        where ((c.Credit - c.Debit) > 0)
        select c);
}

Другой теоретический способ решенияпроблема заключается в установке фильтра в обработчике события Executed.Однако по какой-то причине, когда я это делаю, фильтр не применяется к экрану.Но даже если этот метод будет работать, вы все равно будете фильтровать на стороне клиента, что может оказаться не тем, что вы хотите.

...