LINQ可以帮我吗?

时间:2009-12-11 20:14:35

标签: c# .net vb.net linq

Linq很新,对此功能非常兴奋。但是,我想知道我是否可以使用LINQ执行以下操作:

DataView source = (DataView) MyDataGrid.ItemsSource;

foreach (DataRowView vw in source)
 {
      if (vw.Row[dummyColumnIndex] != null && 
         vw.Row[dummyColumnIndex].ToString() == DisplayValue)
      {
            vw.Row[dummyColumnIndex] = string.Empty;
            break;
      }
 }

请注意,我的foreach循环中断,这意味着我只需要将第一个匹配行的列值重置为空字符串。

谢谢!

4 个答案:

答案 0 :(得分:4)

是的,但你需要使用IEnumerable的Cast方法将它转换为一个通用的IEnumerable,其中Type参数是'DataRowView',然后你可以做这样的事情。这将使用提供的逻辑(以lambda表达式的形式)来评估DataView中的每个记录,以确定它是否匹配。它将返回它找到的第一个,如果没有找到,则返回'null'。无论如何你都可以处理null;我通常喜欢在这种情况下抛出异常,除非有正当理由不能找到匹配。

        var match = source.Cast<DataRowView>().FirstOrDefault(
                        s => s[dummyColumnIndex] != null && 
                            s[dummyColumnIndex].ToString() == DisplayValue);

        if (match == null)
          throw new Exception("Could not find match for " + DisplayValue);

        match[dummyColumnIndex] = String.Empty;

答案 1 :(得分:2)

是的,它可以。我更倾向于使用查询语法:

    var query = from vw in source.Cast<DataRowView>()
                where vw.Row[dummyColumnIndex] != null &&
                vw.Row[dummyColumnIndex].ToString() == DisplayValue
                select vw;

    var item = query.FirstOrDefault();
    if (item != null)
       item.Row[dummyColumnIndex] = "";

正如其他人所说:如果找不到匹配项,最好使用'FirstOrDefault'来避免抛出异常。

答案 2 :(得分:1)

var firstMatch = source
    .Cast<DataRowView>()
    .First(vw => vw.Row[dummyColumnIndex] != null && vw.Row[dummyColumnIndex].ToString() == DisplayValue);
firstMatch.Row[dummyColumnIndex] = string.Empty;

请注意,如果没有匹配,则会抛出异常,因此您也可以这样做:

var firstMatch = source
    .Cast<DataRowView>()
    .FirstOrDefault(vw => vw.Row[dummyColumnIndex] != null && vw.Row[dummyColumnIndex].ToString() == DisplayValue);

if(firstMatch != null)
    firstMatch.Row[dummyColumnIndex] = string.Empty;

答案 3 :(得分:0)

如果目标是在列表中找到某些内容 {
 if(sorted)http://en.wikipedia.org/wiki/Search_algorithms
 否则如果(高效)http://en.wikipedia.org/wiki/Sort_algorithms
 否则我不知道 }