2017-02-21 55 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

很高興幫助你。 –