簡體   English   中英

LINQ可以幫我嗎?

[英]Can LINQ do this for me?

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循環中有一個中斷,這意味着我只需要將第一個匹配行的列值重置為空字符串即可。

謝謝!

是的,但是您需要使用IEnumerable的Cast方法將其轉換為Type參數為'DataRowView'的通用IEnumerable,然后您可以執行類似的操作。 這將使用提供的邏輯(以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;

是的,它可以。 我傾向於使用查詢語法:

    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”來避免在找不到匹配項時引發異常。

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;

如果目標是要在列表中找到東西
{
如果(已排序) http://en.wikipedia.org/wiki/Search_algorithms
否則(有效) http://en.wikipedia.org/wiki/Sort_algorithms
否則我不知道
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM