3

Automapper の IQueryable エクステンソインを使用しようとしています。
次のコード:

class Program
{
    public class A { public string[] Strings { get; set; } }
    public class B { public string[] Lines { get; set; } }

    static void Main(string[] args)
    {
        Mapper.CreateMap<A, B>()
              .ForMember(m => m.Lines, action => action.MapFrom(src => src.Strings));

        IQueryable<A> qa = (new List<A>() {new A() {Strings = new string[0]}}).AsQueryable();
        IQueryable<B> b = qa.Project().To<B>(); // error is here
    }
}

「シーケンスに要素が含まれていません」というエラーが発生します。これは、次の行が原因です。

          .ForMember(m => m.Lines, action => action.MapFrom(src => src.Strings));

私は何を間違っていますか?この特定のケースにはより簡単な解決策があることは知っていますが、「.MapFrom」メソッドでコレクションを使用するたびにこの問題に遭遇します。
STack トレースは次のように述べています。

System.Linq.Enumerable.First[TSource](IEnumerable 2.GetOrAdd(TKey key, Func 1.ToTResult in d:\Work\Misc\VS\ConsoleApplication1\ConsoleApplication1\Program.cs:line 57 at ConsoleApplication1.Program.Main) で(String[] args) in d:\Work\Misc\VS\ConsoleApplication1\ConsoleApplication1\Program.cs:line 21 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile) System.Threading.ThreadHelper.ThreadStart_Context(オブジェクト状態)の Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() で、証拠 assemblySecurity、String[] args )1 source)
at AutoMapper.MappingEngine.CreateMapExpression(Type typeIn, Type typeOut) at AutoMapper.MappingEngine.<CreateMapExpression>b__9[TSource,TDestination](TypePair tp) at System.Collections.Concurrent.ConcurrentDictionary
2 valueFactory) at AutoMapper.MappingEngine.CreateMapExpression[TSource,TDestination]()
at ConsoleApplication1.ProjectionExpression


System.Threading.ExecutionContext.RunInternal (ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態、ブール値 preserveSyncCtx) で System.Threading.ExecutionContext.Run (ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態、ブール値 preserveSyncCtx) で System.Threading.ExecutionContext.Run (ExecutionContext executionContext、ContextCallback コールバック、オブジェクト状態) System.Threading.ThreadHelper.ThreadStart() で

そのため、ある時点で First() を実行します。なんで?それを解決する方法は?
ありがとう。

4

0 に答える 0