我有一个临时报告系统,我没有编译时了解查询源类型或所需字段的知识。我可以使用
报告系统允许查询返回LEFT JOIN的结果。连接表中的某些字段在数据库中为
如果我在编译时使用LINQ来完成这个任务,我会显式地转换为可为空类型:
我收到了以下错误提示:
我收到的是:
System.Linq.Expressions.Expression
工厂方法在运行时编写表达式树,并使用反射调用LINQ方法,但动态LINQ是一个更简单的解决方案。报告系统允许查询返回LEFT JOIN的结果。连接表中的某些字段在数据库中为
NOT NULL
,但由于这是一个LEFT JOIN
,对于某些记录,这些字段将包含NULL
。EF6生成的表达式因此失败,因为该表达式投影到非可空值类型。如果我在编译时使用LINQ来完成这个任务,我会显式地转换为可为空类型:
enum Color { Red, Green, Blue }
// using System;
// using static System.Linq.Enumerable;
// using System.Linq;
var range = Range(0, 3).Select(x => (Color)x).AsQueryable();
var qry = range.Select(x => (Color?)x);
动态 LINQ 支持显式转换:
// using static System.Linq.Dynamic.Core
var qry1 = range.Select("int?(it)");
但是查询中只能引用特定的一组类型。如果我尝试在查询中使用Color
:
var qry2 = range.Select("Color(it)");
我收到了以下错误提示:
如果尝试将其显示转换为在类型 'Color' 中不存在可用的方法 'Color'
Color?
,则会出现此问题:var qry3 = range.Select("Color?(it)");
我收到的是:
如何使用动态LINQ库完成此操作?请求的值 'Color' 未找到。
NULL
。此外,这对于非枚举值类型也没有帮助。 - Zev Spitz