你可以将LINQ表传递给一个函数吗?
问题描述:
我想发送一个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;
}
答
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查询之外的中心位置。
我遇到的问题不是调用任意函数,而是使用'table'调用任意函数。我希望将'table'作为'object'发送,而不是将所有属性作为参数发送给函数(或者像我之前提到的那样处理Linq语句中的逻辑)。 – user606934 2011-02-27 18:38:44
更正...看来我不能使用任意函数。感谢你的帮助,穆罕默德! – user606934 2011-02-28 15:56:04