ですから、オブジェクトの列挙または照会可能シーケンスであるdummy_table
を持って
public static Expression<Func<dummy_table, Dummy>> EntityToPoco()
{
return d => new Dummy
{
Name = d.name,
Notes = d.notes,
HelpText = d.help_text
};
}
。シーケンスにクラスDummyTableElement
のオブジェクトが含まれているとしましょう。
DummyTableElement
がある場合は、Dummy
オブジェクトに変換する方法を知っています。この関数を再利用して、DummyExtended
とDummyAlsoExtended
のような他のオブジェクトを作成したいとします。あなたはこのLINQ-同様の操作を行いたい場合は、それはそれのための拡張機能を作成するのが最善です:
static class DummyTableElementExtensions
{
public static Dummy ToDummy(this TableElement tableElement)
{
return new Dummy()
{
Name = tableElement.name,
Notes = tableElement.notes,
HelpText = tableElement.help_text
};
}
}
あなたがこれをしたら、DummyExtended
とDummyAlsoExtended
にTableElements
を変換するために、同様の機能を作成することができます。彼らは1ライナーになるでしょう。
同じ拡張クラスで:
public static DummyExtended ToDummyExtended(this TableElement tableElement)
{
return new DummyExtended()
{
Description = tableElement.table_1.table_2.description,
Dummy = tableElement.ToDummy(),
};
}
public static DummyAlsoExtended ToDummyAlsoExtended(this TableElement tableElement)
{
return new DummyAlsoExtended
{
InnerHtml = tableElement.table_html.description,
Dummy = tableElement.ToDummy(),
};
}
そして、あなたはこれらを持ったら、あなたはTableElements
の任意のIQueryable
を変換するための拡張機能を作成することができます。
public static IQueryable<DummyExtended> ToDummyExtended(
this IQueryable<TableElement> tableElements)
{
return tableElements
.Select(tableElement => tableelement.ToDummyExtended();
}
と同様の1行DummyAlsoExtended
の機能あなたのFind
機能とFindAnother
機能
もワンライナーになります
private IQueryable<DummyExtended> Find()
{
return dummy_table.ToDummyExtended();
}
private IQueryable<DummyAlsoExtended> FindAnother()
{
return dummy_table.ToDummyAlsoExtended();
}
あなたはこの中で表現を使用していた理由は、私はよく分かりません。とDummyAlsoExtended
は、両方ともプロパティDummy
を持っている点を除いて、実際には似ていないようです。
Find関数で匿名クラスを作成する必要があるため、find関数の宛先をパラメータ化する理由の1つが原因です。再び
、あなたがToDummy
を作成したら、これはワンライナーになります
public static IQueryable<TResult> Find<TSource, TResult>(
this IQueryable<TSource> source,
Expression<Func<TSource, TResult>> resultSelector)
{
return source.Select(sourceElement => resultSelector(sourceElement);
}
使い方は次のようになります。
var X = dummy_Table.find(tableElement => new
{
foo = tableElement.CalculateFoo(),
bar = tableElement.CalculateBar(),
Dummy = tableElement.ToDummy(),
});
私はあなたがLINQKitと '.AsExpandable(を検討する必要があると思います) '。 – NetMage