我有一個接受lambda表達式的方法,該表達式指定從表MyTable
中選擇哪些列。如何使用LINQ返回C#中的所有屬性或其選擇?
public List<T> GetSelection<T>(string a, Expression<Func<MyTable, T>> columnsToSelect = null)
{
IQueryable<MyTable> query = _myTableRepository.Where(c => c.Name == a);
if (columnsToSelect != null)
return query.Select(columnsToSelect).ToList();
return query.ToList(); // Intellisense gives an error here, please read on
}
正如你所看到的,columnsToSelect
有null
默認值,讓我把這種方法在任何有以下兩種方式:
// passing in a lambda expression to select the columns I want
var result = GetSelection("AValue", t => new { t.Prop1, t.Prop2 });
// or like this, in which case I want all the columns
var result = GetSelection("AValue");
我從智能感知得到的錯誤是這個:
無法隱式轉換 型 'System.Collections.Generic.List' 到 'System.Collections.Generic.List'
首先,我不明白這個令人困惑的錯誤消息,但我並沒有太多困擾它。也就是說,我認爲我需要的是一種將MyTable
的整個對象轉換爲匿名類型然後返回它的列表的方法,並且通過整個對象我的意思是匿名類型對象將包含MyTable
的所有屬性。我怎樣才能做到這一點?或者,如果還有其他更好的方法來實現我想要的,請提出建議。
我覺得做這樣的工作的唯一辦法,將返回'object'。或者'動態'。 Lookie這裏http://stackoverflow.com/questions/10073319/returning-anonymous-type-in-c-sharp –
@HristoYankov謝謝,但我非常反對使用動態,除非我真的必須。 –