是否可以以简单的方式创建如下所示的动态选择器,以及如何?
Func<Company, string> companyName = x.CompanyName;
Func<Company, int> companyId = x.CompanyId;
var result = datacontext.Select(x => new
{
CompanyName = companyName,
CompanyId = companyId
});
上面的代码抛出异常:“无法创建类型'System.Func`2的常量值......在此上下文中仅支持基本类型或枚举类型。”
问题是我需要从大约10个不同的表中动态选择最多8个字段,这些字段可以是string,int,datetime nullable和not null的类型。使用Expressions动态构造选择器很安静。解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
var result = datacontext.Select(x => new
{
CompanyName = mcname(x),
CompanyId = companyId(x)
});
但原因在哪里?
答案 1 :(得分:0)
你的Func应该是这样的:
Func<Company, string> companyName = (company => company.CompanyName);
Func<Company, int> companyId = (company => company.CompanyId);
使用你的功能:
var result = datacontext.Select(x => new
{
CompanyName = companyName(x),
CompanyId = companyId(x)
});
我不知道为特定字段动态创建查询的方法。您可以通过一次执行动态链接过滤器...除非您在每行上存储大量信息或正在加载数十万行,否则我不会担心它。
P.S。您需要小心使用主数据库筛选器中的自定义函数。 LINQ无法将所有命令转换为本机SQL查询,因此最终可能会拉动整个表并在代码中进行过滤。请注意。
答案 2 :(得分:0)
我不完全确定你想要完成什么,但你能想做的就像这样吗?
var result = datacontext.Select(x => new
{
CompanyName = x.companyName,
CompanyId = x.companyId
});