首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ包含完全匹配

LINQ包含完全匹配
EN

Stack Overflow用户
提问于 2013-09-06 16:26:57
回答 3查看 2.7K关注 0票数 0

我试图在DataRow数组中找到一组条件的匹配项。

代码语言:javascript
复制
string startDate = "1/1/2012";
string endDate = "11/1/2012";

DataRow[] scheduleResults = myDataTable.AsEnumerable()
    .Where(r => r.Field<string>("Name").Contains("Eglin")
    && r.Field<string>("Name").Contains(startDate)
    && r.Field<string>("Name").Contains(endDate)).ToArray();

这将返回scheduleResults中的两个scheduleResults

  1. USAF:Eglin (1/1/2012-11/1/2012)
  2. USAF:Eglin (11/1/2012-3/31/2017)

我可以看到,startDate实际上包含在endDate中,这就是我得到这两个结果的原因。我的问题是,如何在整个startDate上完全匹配,这样我就不会得到第二个结果了。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-06 16:30:36

假设格式保持不变,您只需在"(" + startDate + "-" + endDate + ")"上进行匹配

代码语言:javascript
复制
string startDate = "1/1/2012";
string endDate = "11/1/2012";

DataRow[] scheduleResults = myDataTable.AsEnumerable()
    .Where(r => r.Field<string>("Name").Contains("Eglin")
    && r.Field<string>("Name").Contains("(" + startDate + "-" + endDate + ")"))
    .ToArray();

这是假设您的所有数据都在一个名为"Name“的字段中,而这不是一个错误。如果可能,最好将数据元素存储在单独的列中。

票数 2
EN

Stack Overflow用户

发布于 2013-09-06 16:30:34

问题是,您的数据基本上是一种尴尬的格式。你可以设置你想要的完全匹配的格式,但这仍然是一个痛苦。

我建议您将每一行解析为包含所有组成部分(组织、名称、开始、结束?)的类型。使用DateTime作为开始/结束值(如果选择使用my 野田时间库.),则使用LocalDate。在这一点上,处理数据变得更加简单。查询将类似于:

代码语言:javascript
复制
var query = myDataTable.AsEnumerable()
                       .Select(row => ParseRow)
                       .Where(p => p.Name.Contains("Eglin") &&
                                   p.StartDate == startDate &&
                                   p.EndDate == endDate)
                       .ToList();

(其中ParseRow是接受DataRow并返回适当类型的方法。)

如果要处理大量的值,您可能需要将DataTable转换为一个适当的列表。如果需要获取这些行(而不仅仅是数据),则可以始终将源DataRow包括在您的类型中。

票数 3
EN

Stack Overflow用户

发布于 2013-09-06 17:16:36

为此使用Regex是完美的:

代码语言:javascript
复制
string name = "Eglin";
DataRow[] scheduleResults = 
        myDataTable.AsEnumerable()
        .Where(r => Regex.IsMatch(r.Field<string>("Name"),
                       string.Format(".*{0}.*{1}.*{2}", name, startDate, endDate)))
        .ToArray();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18662378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档