2012-02-17 3 views
1

ここでDisplayNamestringで、fooはオブジェクトです。 foo.ToString()を使用すると、エラーが発生します。linqの文字列に変換してエンタント

私はコードを持っている:

var completionTimeModels = 
    from timeline in context.processTimelines 
    join asst in context.timeKeeping on timeline.Id equals asst.Id into TT 
    from TimeModels in TT.DefaultIfEmpty() 

    let foo = TimeModels.ExternalId !=null ? TimeModels.Name: timeline.circuitName 
    select new Items() 
    { 
     Name = timeline.Name 
     DisplayName = foo 
    }; 

をして私が行うときは、次の

Linq cannot handle .ToString()

+0

TimeModels.Nameおよびtimeline.circuitNameでToString()メソッドを明示的に呼び出すため、文字列ではないようです。もしそうなら、彼らのタイプは何ですか? –

答えて

2

ToString()エンティティへのLINQのために定義されていません。

DisplayName = TimeModels.ExternalId !=null ? TimeModels.Name.ToString(): timeline.circuitName.ToString(), 

は、それがエラーになります - 匿名クラスに投影し、最後の投影のためにLinqからオブジェクトに切り替えます:

(... 
    select new 
    { 
     Name = timeline.Name, 
     DisplayName = TimeModels.ExternalId !=null ? TimeModels.Name : timeline.circuitName 
    }) 
    .AsEnumerable() 
    .Select(x=> new Items() 
    { 
       Name = x.Name 
       DisplayName = x.DisplayName.ToString() 
    }; 

なぜこれを最初に行う必要がありますか?どのタイプがTimeModels.Nametimeline.circuitNameですか?

+0

最初の選択DisplayName = TimeModels.ExternalId!= null? TimeModels.Name:timeline.circuitName はDisplayNameが文字列であるためエラーを返します。 – GANI

+0

TimeModels.NameとTimeLine.CircuitNameは両方ともvarchars .. – GANI

+1

データベースではなく、モデル内のどのタイプですか? - それらがvarcharの場合、Entitiesモデルの文字列プロパティにマップする必要があります。 – BrokenGlass