2016-11-25 8 views
-7

私はこれらの2つのLINQクエリが異なる理由、または1つが動作し、他はしない理由を知りたいですか?明らかに、コンパイラは彼らが異なっていると言いますが、私はなぜそれを見つけることができませんか?これらの2つのLINQクエリが異なるのはなぜですか?彼らは同じように見える

私は最初のクエリを動作させたいが、何をするにしても動作しない。

が暗黙的にタイプ変換できません。LINQクエリ下のザ・は私のエラーを与える

、 'int型?' に「System.Collections.Generic.IEnumerable」

public static IEnumerable<int?> GetTenantFacilityCosts(int? code, DateTime date, int number) 
    { 
     return DataContext.Facility_Cost_TBLs. 
       Where(p => p.Tenant_Code == code && 
          p.Code_Date == number && 
          p.Date_Year == date.Year && 
          p.Date_Month == date.Month). 
          FirstOrDefault().Tenant_Portion; 
    } 

しかし、以下、このクエリは、私が取得しようとしていますint値を取得し、エラーをスローしません。

なぜこれらの2つのクエリが異なるのですか。最初のものが正しく動作するのはなぜですか?

+5

エラーはあなたが 'int型を返すようにしようとしていることを示しています' 'IEnumerableをを'返すべきである方法では? 。 – germi

+0

は 'return'を' yield return'に変更します:) –

答えて

2

する必要がありますLINQクエリはint?つまりNULL可能intを返し、それはint?に値を代入されているので、それは第二のために働く理由があります。

返信しようとしているメソッドでint?を返しています(IEnumerable<int?>)。結果の列挙可能性を返す場合は、クエリからFirstOrDefaultを削除する必要があります。メソッド名、つまり複数のCostsで判断すると、これが必要なのです。

一つだけの結果がするメソッドのシグネチャを変更したい場合は:

public static int? GetTenantFacilityCosts(int? code, DateTime date, int number) 
3

動作するものからわかるように、クエリの結果はint?です。これを関数に変換すると、関数の戻り値の型はIEnumerable<int?>になります。

あなたの機能が

public static int? GetTenantFacilityCosts(int? code, DateTime date, int number) 
{ 
    ... 
}