多个输入匿名函数表达式,以便在LINQ中使用

时间:2017-02-21 02:47:33

标签: c# entity-framework linq lambda anonymous-function

我正在尝试开发一个LINQ Query,它将测试数据库中的字符串是否在没有子字符串返回true的数组中,只是整个字符串。

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表达式节点类型&#39; Invoke&#39; LINQ to Entities不支持。

来自研究似乎意味着我需要使用表达式。

但是,这不会编译。

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

由于predicate(c.Institude_ID,values)读取错误 &#34;预期的方法名称&#34;。

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

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

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 个答案:

答案 0 :(得分: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不必从int转换为{ {1}}。