排除我的异常列表LINQ to SQL中的项目

时间:2014-05-14 13:46:14

标签: linq linq-to-sql

我有一个linq查询,它返回一个URL列表。我排除任何以多个扩展名结尾的URL,例如(bat,cmd,...)。我有这个与一些&&和语句编码到查询本身,但宁愿使用定义的myExceptions列表给我更多的灵活性,因为这个列表可能会改变,并可能在我的项目的其他地方使用。

我想替换我的查询部分

  && (!myURL.myURL.Trim().EndsWith("exe")
                                           && !myURL.myURL.Trim().EndsWith("cmd")
                                           && !myURL.myURL.Trim().EndsWith("lnk")
                                           && !myURL.myURL.Trim().EndsWith("bat")                                              
                                           && myURL.myURL.Length > 0 
                                           ))

使用例外列表以获得更多灵活性,例如

 List<string> myExepections = new List<string> { "exe", "cmd", "lnk", "bat" };

通过其他stackoverflow帖子阅读我认为我可以使用except扩展方法或任何包含Contains的方法,就像我在整个网站中看到的那样

Linq - How to select items from a list that contains only items of another list?

但在这种情况下,我不知道如何修改我的查询。任何想法都会非常感激。

这是我现有的查询:

var results = myDataClass.LinksTabke.OrderBy(myURL => myURL.url_Description)
                                   .Where(
                                       myURL =>
                                       myURL.PageID.Equals(QueryStringID)
                                       && (!myURL.myURL.Trim().EndsWith("exe")
                                           && !myURL.myURL.Trim().EndsWith("cmd")
                                           && !myURL.myURL.Trim().EndsWith("lnk")
                                           && !myURL.myURL.Trim().EndsWith("bat")                                              
                                           && myURL.myURL.Length > 0 
                                           ))
                                   .Select(
                                       myURL =>
                                       new results
                                           {
                                               mySectionID = myURL.myTable.mySectionID,                                                
                                               myDescText = myURL.myTable.Desc,   LinkUrl =  myURL.myURL
                                           }).Distinct();
        return results.ToList();

1 个答案:

答案 0 :(得分:0)

看看是否有效:

var results = myDataClass.LinksTabke.OrderBy(myURL => myURL.url_Description)
                                   .Where(
                                       myURL => myURL.PageID.Equals(QueryStringID)

                                       &&
                                       //Works for entity framework
                                       !myExepections.Any(x => x == myURL.myURL.Trim().Substring((myURL.myURL.length - 3), 3)) && myURL.myURL.Length>0)

                                       //Works for Linq 2 SQL and EF                  
                                       !myExepections.Contains(x => myURL.myURL.Trim().Substring((myURL.myURL.length - 3), 3))
                                       && myURL.myURL.Length>0)

                                   .Select(
                                       myURL =>
                                       new results
                                       {
                                           mySectionID = myURL.myTable.mySectionID,
                                           myDescText = myURL.myTable.Desc,
                                           LinkUrl = myURL.myURL
                                       }).Distinct();
           return results.ToList();