C# 实体框架和Linq语法
我试图做一个选择,其中id的最后两个字母与传递给该方法的可枚举字符串中的what匹配,但是我;我把语法搞错了 我正试着把它归结到这些方面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
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())