嘿,我有以下代码:
Func<Assoc, bool> predicate = (x) =>
(
!String.IsNullOrWhiteSpace(version) ? x.Version.Contains(version) : x.Version != null
);
var assocs = _context.Assoc
.Where(x => x.Model == model)
.Where(predicate)
;
但它不起作用。如果我尝试执行此服务器会给我内部服务器异常,但如果我将其更改为
var assocs = _context.Assoc
.Where(x => x.Model == model)
.Where(x => x.Version.Contains(version))
;
它按预期工作。
为什么?
是否可以预览Linq生成的查询?
答案 0 :(得分:0)
使用LINQKit,您可以创建将为您扩展的谓词,以便您可以在IQueryable
表达式中使用它们,但是您不需要这样做只是为了排除版本测试。
var assocs = _context.Assoc
.Where(x => x.Model == model);
if (!String.IsNullOrWhiteSpace(version))
assocs = assocs.Where(x.Version.Contains(version));
答案 1 :(得分:-1)
因为EF可以将from bs4 import BeautifulSoup
soup = BeautifulSoup(open('myhtml.html'), 'html.parser')
currently_watching = soup.find('h2', text='Something really cool here')
parent = currently_watching.parent
方法翻译成sql(Contains
),但不评估您的“外部”功能。
如果将结果加载到memroy(通过导出方法为Version LIKE '%@version%'
),则可以将其作为linq2object执行:
ToList()
我的代码显示并说明但绝对不推荐,因为质疑数据库比处理内存更好。