2017-02-21 57 views
1

我想开发一个LINQ查询,它将测试数据库中的字符串是否在没有子字符串返回true的数组内,只是整个字符串。在LINQ中使用表达式的多输入匿名函数

Func<int, string[], bool> predicate = (i, x) => x.Any(i.ToString().Equals); 

       user.Company += (from c in context.Tbl_Institute 
           where (predicate(c.Institute_ID,values)) 
           select c.Institute_Title + "," 
           ).ToString(); 

我有这种迄今其编译,但提供了我的一个错误: 的LINQ表达式节点类型“调用”不LINQ支撑到实体。

从研发似乎意味着我需要使用的表达式。

然而,这并不编译。

Expression`<Func<int, string[], bool>> predicate = (i, x) => x.Any(i.ToString().Equals);` 

由于predicate(c.Institude_ID,values)有错误阅读 “有望方法名称”。

有没有人有这方面的经验?我对匿名函数很陌生。

编辑:由于这里要求是不编译代码,我道歉,如果我还不清楚。

Expression<Func<int, string[], bool>> predicate = (i, x) => x.Any(i.ToString().Equals); 
user.Company += (from c in context.Tbl_Institute 
       where (predicate(c.Institute_ID,values)) 
       select c.Institute_Title + ",").ToString(); 
+1

我看不出有什么明显的错误在你共享的代码点点。听起来像谓词声明有问题。但没有一个可靠地再现问题的好的[mcve],我不能指出任何具体的东西。请改善你的问题。 –

+0

将函数更改为表达式时,此函数不会自行编译。当它显式地返回错误时,不确定其他代码如何帮助。 –

+1

@AnthonyDrury - 你的代码看起来有点奇怪。你在'IQueryable <>'上调用'.ToString()'。你真的需要为我们提供[mcve]。这意味着向我们提供最少量的代码,我们可以通过粘贴和编译来查看您遇到的错误。 – Enigmativity

回答

1

您在这里要求实体框架太多了。我不明白为什么在LINQ查询之外保留这个匹配函数,你能解释一下为什么你这么做吗?我认为EF正在为此付出努力。

这里有一段代码,我认为应该工作:

List<string> values = new List<string> { "1", "2", "3", "4" }; 

var matchingInstitutesNames = context 
    .Tbl_Institute 
    .Where(x => values.Contains(x.Institute_Id.ToString())) 
    .Select(x => x.Institute_Title) 
    .ToList(); 

var joinedInstitutesNames = string.Join(",", matchingInstitutesNames); 
user.Company += joinedInstitutesNames; 

如果不工作,你可能想你的string列表转换的int列表,以便EF不必从intstring

+0

您好!是的,我刚刚提出了一个解决方案,这是非常接近this.Changing我在哪里 values.Any(s => c.Institute_ID.ToString()。等于(s)) 这编译但我越来越奇怪返回的值似乎是一个大规模的查询,而不是实际的响应。如果你想查看它,我会为它打开一个新的问题。 –

+0

刚试过你的,它完美的工作!谢谢! –

+1

很高兴帮助你。 –