我有麻烦混合使用C#的功能与LINQ到SQL混合使用C#功能
假设我有一个数据库表中的“东西”的条件和本地C#功能:BOOL isGood( params)
我想使用该函数从表中选择行。
var bad = dataContext.Things.Where(t=>t.type=mytype && !isGood(t,myparams))
dataContect.Things.deleteAllOnSubmit(bad);
或
if (dataContext.Things.Any(t=>t.type=mytype && isGood(t,myparams)))
{
return false;
}
当然,这并不工作,LINQ的没有我的翻译功能到SQL语句的方式。所以这将产生:
NotSupportedException:方法'布尔isGood(thing,params)'没有支持转换为SQL。
什么是重新设计这个工作的最好方法?
我可以拆分的声明,并转换为列出这样的:
List<Things> mythings dataContext.Things.Where(t=>t.type=mytype).toList()
if (mythings.Any(t=>isGood(t,myparams)))
{
return false;
}
这个工作,但似乎效率不高,因为整个名单在每一种情况下产生。 而我不认为我可以做一个deleteAllOnSubmit结果
我可以做一个foreach over mythings而不是调用toList(),也可以。虽然似乎不雅。
我有什么其他的选择,以及这里推荐的方法是什么?
编辑:
调用asEnumerable()似乎是另一种选择,而且似乎比toList()至少要好。即
dataContext.Things.Where(t=>t.type=mytype).asEnumerable().Any(t=>isGood(t,myparams))
isGood()函数是一个可以包含的简单函数吗?如果它可以表示为Linq,那将是最简单的解决方案。 – 2012-04-02 13:54:10
它相当复杂。除此之外,它检查item1是否适合放在另一个表的任何item2中,允许旋转 – HugoRune 2012-04-02 13:57:10
是的,这么认为。那么我认为没有任何选择。把整个名单拉回来。找到主键,然后在完成提交时进行删除。我很想知道是否有其他人可以想办法解决这个问题,所以我很喜欢它,看看有没有人能想出办法。 – 2012-04-02 14:02:55