Можете ли вы передать таблицу LINQ в функцию? - PullRequest
1 голос
/ 23 февраля 2011

Я хочу отправить таблицу (сущность) LINQ в качестве параметра функции, чтобы получить значение в select {}.Цель состоит в том, чтобы вернуть значение, основанное на нескольких свойствах таблицы / сущности, и я не хочу, чтобы вся логика, определяющая возвращаемое значение, была в операторе LINQ.По сути, возможна ли строка 'value = GetValue (tbl)'?

Public class MyClass
{
    public int value { get; set; }
}

//Some General function to determine return value from multiple properties
Private int GetValue(MyEntity cls)
{
    if (cls.var1 == 1)
        return var2;
    if (cls.var1 == 2)
        return cls.var2 - cls.var3;

    return -1;
}

Public List<MyClass> GetStuff(int iType)
{    
    List<MyClass> myClass = (from tbl in context.MyEntity
                             where tbl.MyType == iType
                             select new MyClass
                             {
                                 value = GetValue(tbl)
                             }).ToList<MyClass>();
    return myClass;
}

1 Ответ

1 голос
/ 25 февраля 2011

LINQ to Entities предназначен для преобразования всего запроса LINQ в эквивалентный SQL-запрос, который выполняется на сервере, поэтому вам нужно просто использовать функции и выражения, которые он знает, как преобразовать в SQL. Вы не можете просто вызывать произвольные функции.

-Эту проблему можно решить либо переписав логику вычислений в запросе LINQ, а это то, что вы упомянули, что вам не нужно.

-Другим решением было бы добавить вычисляемые свойства в MyClass, которые основаны на свойствах данных (var1, var2, var3, ...), которые нужно вычислить.

-Вы можете использовать что-то вроде техники, упомянутой в этом сообщении в блоге: http://daniel.wertheim.se/2011/02/07/c-clean-up-your-linq-queries-and-lambda-expressions/ поместить вашу логику в центральное место вне запроса LINQ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...