Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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# 实体框架和Linq语法_C#_Entity Framework_Linq - Fatal编程技术网

C# 实体框架和Linq语法

C# 实体框架和Linq语法,c#,entity-framework,linq,C#,Entity Framework,Linq,我试图做一个选择,其中id的最后两个字母与传递给该方法的可枚举字符串中的what匹配,但是我;我把语法搞错了 我正试着把它归结到这些方面 setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper().Any(x => setIds.Contains(x.ToString()) ) 这是目前的全部方法 var tupleResponse = (from setHeaders in _woEntities.SETHEA

我试图做一个选择,其中id的最后两个字母与传递给该方法的可枚举字符串中的what匹配,但是我;我把语法搞错了

我正试着把它归结到这些方面

setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper().Any(x => setIds.Contains(x.ToString()) )
这是目前的全部方法

var tupleResponse = (from setHeaders in _woEntities.SETHEADER
                            join setDetails in _woEntities.SETDETAIL on setHeaders.SET_ID equals setDetails.SET_ID
                            join workOrders in _woEntities.B1PERMIT on new
                            {
                                setDetails.B1_PER_ID1,
                                setDetails.B1_PER_ID2,
                                setDetails.B1_PER_ID3
                            } equals new { workOrders.B1_PER_ID1, workOrders.B1_PER_ID2, workOrders.B1_PER_ID3 }
                            where setDetails.REC_STATUS == "A" && /*setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper().Any(x => setIds.Contains(x.ToString()) )*/
                                  (setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper() == "OS" ||
                                   setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper() == "TR")  &&
                                   workOrders.B1_APPL_STATUS.ToLower() == "open"
                            select new
                            {

                                setHeaders.SET_ID,
                                setHeaders.SET_TITLE,
                                workOrders.B1_ALT_ID
                            }).AsEnumerable()
           .Select(x => Tuple.Create(x.SET_ID, x.SET_TITLE, x.B1_ALT_ID))
           .ToList();

我认为您最近的测试使用
.EndsWith

setHeaders.SET_ID.ToUpper().EndsWith("TR")
LINQ通常无法为本地集合翻译
。Contains
,但如果可以,我认为您不需要
。Any
。ToString()
(您知道它是一个字符串)

可能不起作用

setIds.Contains(setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper())

如果没有,您需要研究LINQKit和PredicateBuilder。

很抱歉,我认为我们可能在讨论不同的观点,我想扩展函数,这样我就不必硬编码“TR”或“OS”,我希望能够传递一组“endings”(企业用于区分不同组的命名约定)并且能够将SET_ID的末尾与该列表中的值相匹配。您可以尝试我输入的语句,看看它是否与您的LINQ提供程序一起工作吗?如果不是,这就是PredicateBuilder的用武之地。啊,笨蛋,对不起,这是我的错,我误读了。这个代码似乎有效!感谢setIds.Contains(setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length-2).ToUpper())