你能把LINQ表传递给函数吗?

时间:2011-02-23 16:43:20

标签: linq-to-entities

我想将一个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 个答案:

答案 0 :(得分:1)

LINQ to Entities旨在将整个LINQ查询转换为在服务器上运行的等效SQL查询,因此您应该只使用它知道如何转换为SQL的函数和表达式。你不能只调用任意函数。

- 这可以通过重写LINQ查询中的计算逻辑来解决,这就是你提到的你不想要的东西。

- 另一种解决方案是将计算属性添加到依赖于要计算的数据属性(var1,var2,var3,...)的MyClass。

- 你可以使用类似博客文章中提到的技术:http://daniel.wertheim.se/2011/02/07/c-clean-up-your-linq-queries-and-lambda-expressions/ 将您的逻辑放在LINQ查询之外的中心位置。