簡體   English   中英

如何轉換Expression Func <T, object[]> 到Func <T, object>

[英]Howto convert Expression Func<T, object[]> to Func<T, object>

我有一個需要在linq查詢中選擇的字段數組。
這些字段的格式為Expression<Func<T, object[]>> (字段數組)
(我無法改變這一點,字段的順序對其他代碼很重要)

我需要將它轉換為我可以在IQueryable<T>使用的選擇器。 但是我該怎么做呢? 如何實現GetSelector()函數?

var fields = GetFields<Employee>(e => new[] { e.Name, e.Street });
var selector = GetSelector(fields);
var result = await qry.Select(selector).ToListAsync();

GetFields功能:

private Expression<Func<T, object[]>> GetFields<T>(Expression<Func<T, object[]>> fields)
{
    return fields;
}

GetSelector功能:

private Expression<Func<T, object>> GetSelector<T>(Expression<Func<T, object[]>> fields)
{
    //How to convert? 
    //It should return somehting like this: (e => new {e.Name, e.Street})
}

我不太確定IQueryable部分(請測試它),但更改表達式簽名非常簡單,因為object[]是一個object

private static Expression<Func<T, object>> GetSelector<T>(Expression<Func<T, object[]>> fields)
{
    var result = Expression.Lambda<Func<T, object>>(fields.Body, fields.Parameters);
    return result;
}

鑄造功能<t>功能<object><div id="text_translate"><p>我試圖弄清楚如何將Func&lt;T&gt;傳遞給Func&lt;object&gt;方法參數:</p><pre> public void Foo&lt;T&gt;(Func&lt;T&gt; p) where T: class { Foo(p); } public void Foo(Func&lt;object&gt; p) { }</pre><p> <strong>奇怪的是,它適用於 NET 4.0 Class 庫,但不適用於 Silverlight 4 Class 庫。</strong> 實際上我希望它在 Silverlight 中工作,並且我輸入了諸如Func&lt;T, bool&gt;之類的參數</p></div></object></t>

[英]Casting Func<T> to Func<object>

暫無
暫無

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

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