我有一个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();
答案 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();