Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Func<&燃气轮机;实体框架内查询_C#_Linq_Entity Framework - Fatal编程技术网

C# 使用Func<&燃气轮机;实体框架内查询

C# 使用Func<&燃气轮机;实体框架内查询,c#,linq,entity-framework,C#,Linq,Entity Framework,我有以下实体框架查询: Func<Company, bool> filter; if (officeId != 0) filter = company => !company.IsDeleted && company.OfficeCompanies.Any(c => c.OfficeId == officeId); else filter = company => !company.IsDeleted; var companies

我有以下实体框架查询:

Func<Company, bool> filter;
if (officeId != 0)
    filter = company => !company.IsDeleted && company.OfficeCompanies.Any(c => c.OfficeId == officeId);
else
    filter = company => !company.IsDeleted;

var companies = from c in Repository.Query<Company>()
                where filter(c) &&
                    (relationshipTypes.Count() == 0 || relationshipTypes.Any(r => r == c.TypeEnumIndex)) &&
                    c.Description.Contains(term)
                orderby c.Description
                select new JqueryUiAutoCompleteItem
                {
                    label = c.Description,
                    value = SqlFunctions.StringConvert((double)c.Id)
                };
Func过滤器;
如果(officeId!=0)
过滤器=公司=>!company.IsDeleted和company.OfficeCompanies.Any(c=>c.OfficeId==OfficeId);
其他的
过滤器=公司=>!公司被删除;
var companys=来自Repository.Query()中的c
其中过滤器(c)&&
(relationshipTypes.Count()==0 | | relationshipTypes.Any(r=>r==c.TypeEnumIndex))&&
c、 说明.包含(术语)
orderby c.说明
选择新的JqueryUiAutoCompleteItem
{
标签=c.说明,
value=SqlFunctions.StringConvert((双精度)c.Id)
};
它给了我一个错误:

LINQ to实体中不支持LINQ表达式节点类型“Invoke”

如果删除查询主体中对
filter()
的引用,则不会出现错误


我理解此错误的含义:我使用的代码无法转换为SQL。但是我的
filter()
有什么不能转换为SQL的呢?

您需要将
Func
切换到
表达式,然后用LINQ fluent语法将该表达式直接传递到
中的
。我认为没有办法在查询语法中使用表达式

Expression<Func<Company, bool>> filter; //<-- changed type
if (officeId != 0)
    filter = company => !company.IsDeleted && company.OfficeCompanies.Any(c => c.OfficeId == officeId);
else
    filter = company => !company.IsDeleted;

var companies = from c in Repository.Query<Company>().Where(filter) // <-- changed syntax
                where (relationshipTypes.Count() == 0 || relationshipTypes.Any(r => r == c.TypeEnumIndex)) &&
                    c.Description.Contains(term)
                orderby c.Description
                select new JqueryUiAutoCompleteItem
                {
                    label = c.Description,
                    value = SqlFunctions.StringConvert((double)c.Id)
                };
表达式过滤器;//!company.IsDeleted和company.OfficeCompanies.Any(c=>c.OfficeId==OfficeId);
其他的
过滤器=公司=>!公司被删除;
var companys=from c in Repository.Query().Where(filter)//r==c.TypeEnumIndex))&&
c、 说明.包含(术语)
orderby c.说明
选择新的JqueryUiAutoCompleteItem
{
标签=c.说明,
value=SqlFunctions.StringConvert((双精度)c.Id)
};

您必须按照表达式中的方式创建它@TyCobb:我试过了,但是如何从查询中调用过滤器表达式呢。我不能像上面那样称呼它。您链接到的页面使用
.Where()
方法而不是LINQ查询。是的,在
.Where()
上标记LINQ查询看起来有点奇怪,但它似乎可以工作。