我想将一个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;
}
答案 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查询之外的中心位置。