C#LINQ&;解析信息
我试图找出搜索对象列表的最简单方法,并使用字符串中的数据来辅助搜索。下面是一个示例对象,有助于演示我正在尝试做的事情C#LINQ&;解析信息,c#,.net,linq,C#,.net,Linq,我试图找出搜索对象列表的最简单方法,并使用字符串中的数据来辅助搜索。下面是一个示例对象,有助于演示我正在尝试做的事情 public class Event { public DateTime timestamp; public int reason; public int data; public string comment; } “comment”包含一系列关于特定事件的额外信息,但是我需要搜索我的列表,查看是否满足三个条件,并返回满足条件的列表 数据>=7
public class Event {
public DateTime timestamp;
public int reason;
public int data;
public string comment;
}
“comment”包含一系列关于特定事件的额外信息,但是我需要搜索我的列表,查看是否满足三个条件,并返回满足条件的列表
我可以通过常规编码和使用常规表达式来完成这一切,但我正在尝试找出是否有办法将其转换为单个LINQ查询。向事件类添加一个方法,该方法解析Dist(xxxx.xx)的注释行,以便在找到它并且xxx大于等于500时返回true
public class Event
{
public DateTime timestamp;
public int reason;
public int data;
public string comment;
public bool HasDistMiniumum(int min)
{
add your regular expression code here that looks for Dist(xxxx) where xxxx is >= min...
}
// Use this Linq Line...
var matchingItems = EventList.Where(item => item.data >= 75 && item.HasDistMinimum(500));
当然可以用LINQ来做
var regex = new Regex(@"(Dist\((\d*\.?\d*)m\))");
var result = Events
.Where(e => e.data >= 75)
.Select(e => new {Result = regex.Match(e.comment), Event = e})
.Where(o => double.Parse(o.Result.Groups[2].Value) >= 500)
.Select(o => o.Event);
为了更安全,您甚至可以在Where子句中使用TryParse:
.Where(o =>
{
double number;
double.TryParse(o.Result.Groups[2].Value, out number);
return number >= 500;
})
您的
if
s将转换为Where
。其余的几乎一样。您遇到的问题是什么?请您解释一下3?显示常规代码,我们会将其转换为LINQ@Tarik真正地我不知道这里有代码翻译服务。@Tarik No你应该考虑一下(主题:鼓励坏问题)是的,如果他能改变他的事件类,这是一个很好的答案。如果他不能改变事件类,他可以添加一个静态扩展类==>静态类EventExt{static bool HasDistMinimum(这个事件事件,以分钟为单位){…}通过使用Select
只运行一次正则表达式,可以提高效率。这段代码将运行两次正则表达式。@IanNewson我已经用你的建议修复了它,很好,但是你不需要将e.Success&&
添加到Where
调用中吗?@IanNewson你的右边,捕捉得好。我刚刚意识到,这最终会选择匹配项并将其输出到结果。是否有办法检查此项并最终选择原始对象?是的,在select
中,使用匹配项和原始对象创建一个新的匿名对象,例如select(e=>new{match=regex.match(e.comment),Event=e)
。