我正在尝试开发一个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();
答案 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}}。