別のIQueryableをパラメータとして扱うためにLINQ式セレクタを作成しようとしています。 dot.netのフィドルは、私がIQueryable parameter
を受け入れ、場合によっては、セレクタに適用するCustomSelectorをコーディングしようとしていますhere式<Func <TSource、TResult >>セレクタwithパラメータ
です。
CustomSelector IQueryableパラメータに適用する各行の値も含める必要があります。
このようにして、2つのカスタムセレクタを書く必要はありません。
代替はGetMyData2の機能です。
テストコードは以下の通りです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
public class Entity
{
public int Id { get; set; }
public string Name { get; set; }
}
public class EntityDto
{
public int Id { get; set; }
public string Name { get; set; }
public int Count { get; set; }
}
public class TestController
{
public List<Entity> entityList { get; set; }
public List<EntityDto> GetMyData(string condition)
{
List<Entity> sourceEntityList = new List<Entity>();
List<EntityDto> returnEntityList = new List<EntityDto>();
switch(condition)
{
case "A":
returnEntityList = sourceEntityList.Where(x=>x.Name == "A").Select(y=>CustomSelector(sourceEntityList.Where(z=>z.Name=x.Name)));
return returnEntityList;
break;
case "B":
default:
returnEntityList = sourceEntityList.Where(x=>x.Name == "B").Select(y=>CustomSelector(sourceEntityList.Where(z=>z.Name != x.Name)));
return returnEntityList;
break;
}
}
public List<EntityDto> GetMyData2(string condition)
{
List<Entity> sourceEntityList = new List<Entity>();
List<EntityDto> returnEntityList = new List<EntityDto>();
switch(condition)
{
case "A":
returnEntityList = sourceEntityList.Where(x=>x.Name == "A").Select(ent=>
new EntityDto()
{
Id = ent.Id
,
Name = ent.Name
,
Count = sourceEntityList.Count(z=>z.Name== ent.Name)
}
).ToList();
return returnEntityList;
break;
case "B":
default:
returnEntityList = sourceEntityList.Where(x=>x.Name == "B").Select(ent=>
new EntityDto()
{
Id = ent.Id
,
Name = ent.Name
,
Count = sourceEntityList.Count(z=>z.Name != ent.Name)
}
).ToList();
return returnEntityList;
break;
}
}
protected Func<Entity, EntityDto> CustomSelector(IQueryable<Entity> paramQuery)
{
return ent => new EntityDto()
{
Id = ent.Id
,
Name = ent.Name
,
Count = paramQuery.Count()
};
}
}
そして、あなたの質問は... –
別のIQueryableをパラメータとして扱うためにLINQ式セレクタを作成するにはどうすればよいですか? –