[英]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.