2011-02-23 135 views
1

我想发送一个LINQ表(实体)作为函数的参数来在select {}中获取一个值。目的是基于表/实体的几个属性返回一个值,并且我不希望所有确定返回值的逻辑都在LINQ语句中。基本上,是否可以使用'value = GetValue(tbl)'这一行?你可以将LINQ表传递给一个函数吗?

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

LINQ到实体设计到整个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查询之外的中心位置。

+0

我遇到的问题不是调用任意函数,而是使用'table'调用任意函数。我希望将'table'作为'object'发送,而不是将所有属性作为参数发送给函数(或者像我之前提到的那样处理Linq语句中的逻辑)。 – user606934 2011-02-27 18:38:44

+0

更正...看来我不能使用任意函数。感谢你的帮助,穆罕默德! – user606934 2011-02-28 15:56:04

相关问题