SELECT
同じ量に同じものを適用したいのですがqueries
、どうすればよいですか?推測しているようなテンプレートを作成したいと思っていますか?
var query = (from b in db.routes select new
{ name = b.name,
age = b.age});
name=b.nameとage=b.ageを事前に定義したいと思います。
ありがとう
IEnumerable<SomeBaseClassOrInterfacee>
引数を使用してメソッドを作成できます。次に、メソッド内の指定された引数に対して選択を行うことができます。
public class Generic
{
protected Generic(string name, int age)
{
Name = name;
Age = age;
}
public string Name { get; private set; }
public int Age { get; private set; }
}
public class Human : Generic
{
public Human(string name, string surname, int age) : base(name, age)
{
Surname = surname;
}
public string Surname { get; private set; }
}
public class Pet : Generic
{
public Pet(string name, int registrationCode, int age)
: base(name, age)
{
RegistrationCode = registrationCode;
}
public int RegistrationCode { get; private set; }
}
static void Main(string[] args)
{
IEnumerable<Pet> pets = new List<Pet>();
IEnumerable<Human> palls = new List<Human>();
var resPets = SelectAgeGreaterThen10<Pet>(from p in pets where p.Name.StartsWith("A") select p);
var resHumans = SelectAgeGreaterThen10<Human>(from p in palls where p.Name.StartsWith("B") select p);
}
private static IEnumerable<T> SelectAgeGreaterThen10<T>(IEnumerable<Generic> source) where T : Generic
{
return from s in source where s.Age > 10 select (T)s;
}
この例で注意が必要なのは、匿名型を使用していることです。つまり、メソッドを記述できず(戻り型を宣言できません)、ラムダ式をローカル変数に割り当てることができません(ラムダ式を変換するタイプを指定できる必要があります)。
また、型推論を使用してジェネリックメソッドから何かを返すことはできません。入力型だけを指定することはできないからです。ただし、ジェネリッククラスでは型推論を使用できます。
public static class Functions<T>
{
public static Func<T, TResult> Create<TResult>(Func<T, TResult> func)
{
return func;
}
}
次に、次のように書くことができます。
var projection = Functions<Route>.Create(r => new { r.name, r.age });
var query = db.routes
.Select(projection)
...;
ただし、実際に複数の場所で同じプロジェクションを使用する場合は、代わりに名前付きの結果タイプを作成することを検討する必要があります。その時点で、変換方法など、他のオプションを使用できます。
これはどうですか:
class NameAndAge
{
public String Name;
public Int32 Age;
}
class Whatever
{
public IEnumerable<NameAndAge> GetNameAndAges(IEnumerable<dynamic> enumerable)
{
return from b in enumerable select new NameAndAge { Name = b.name,
Age = b.age};
}
}
dynamic
おそらく、引数の型を、の要素の型に置き換えたいと思うでしょうdb.routes
。