簡體   English   中英

將函數傳遞給Contains Linq方法

[英]Passing a function to the Contains Linq method

接下來是我最初的問題 ,該問題已成功得到解答。

為什么當我包含Where()方法時,以下代碼為何起作用,而更通用的示例失敗?

// *** WORKS ***
private IEnumerable<int> _MySelectedData;
public void method()
{
    IEnumerable<int> distinctData = GetData(m => m.ModelID);
}
public IEnumerable<int> GetData(Func<Model, int> selectParam)
{
    return _MyData
        .Where(m => _MySelectedData.Contains(m.ManufacturerID))
        .Select(selectParam).Distinct();
}



// *** FAILS ***
private IEnumerable<int> _MySelectedManufacturers;
public void method()
{
    IEnumerable<int> distinctData = GetData(_MySelectedManufacturers, m => m.ManufacturerID, m => m.ModelID);
}
public IEnumerable<int> GetData(IEnumerable<int> _MySelectedData, Func<Model, int> whereParam, Func<Model, int> selectParam)
{
    return _MyData
        .Where(m => _MySelectedData.Contains(whereParam))
        .Select(selectParam).Distinct();
}

我收到以下錯誤:

'IEnumerable'不包含'Contains'的定義和最佳擴展方法重載'Queryable.Contains ...

錯誤發生在此行:

.Where(m => _MySelectedData.Contains(whereParam))

希望有人能以我的方式突出錯誤!

Contains作為參數,但是您要向其傳遞一個函數 我懷疑您只是想針對“當前”項評估函數:

.Where(m => _MySelectedData.Contains(whereParam(m)))

暫無
暫無

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

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