문제

에 SQL 실행할 수 있습니다 ISNULL(null,")당신은 어떻게 이 linq 쿼리에서?

나는 가입서 쿼리:

var hht = from x in db.HandheldAssets
        join a in db.HandheldDevInfos on x.AssetID equals a.DevName into DevInfo
        from aa in DevInfo.DefaultIfEmpty()
        select new
        {
        AssetID = x.AssetID,
        Status = xx.Online
        };

하지만 내가 열 것이트 유형은 비 널(xx.온라인)설정하는 방법이고,false 이면 null?

도움이 되었습니까?

해결책

부터 aa null 일 수있는 세트/객체입니다. 확인할 수 있습니까? aa == null ?

(aa / xx 상호 교환 가능할 수 있습니다 (질문의 오타). 원래 질문은 이야기합니다 xx 그러나 단지 정의합니다 aa)

select new {
    AssetID = x.AssetID,
    Status = aa == null ? (bool?)null : aa.Online; // a Nullable<bool>
}

또는 기본값을 원한다면 false (아니다 null):

select new {
    AssetID = x.AssetID,
    Status = aa == null ? false : aa.Online;
}

업데이트; Downvote에 대한 응답으로, 나는 더 조사했습니다 ... 사실은 이것이 올바른 접근법입니다! Northwind의 예는 다음과 같습니다.

        using(var ctx = new DataClasses1DataContext())
        {
            ctx.Log = Console.Out;
            var qry = from boss in ctx.Employees
                      join grunt in ctx.Employees
                          on boss.EmployeeID equals grunt.ReportsTo into tree
                      from tmp in tree.DefaultIfEmpty()
                      select new
                             {
                                 ID = boss.EmployeeID,
                                 Name = tmp == null ? "" : tmp.FirstName
                        };
            foreach(var row in qry)
            {
                Console.WriteLine("{0}: {1}", row.ID, row.Name);
            }
        }

그리고 여기 TSQL이 있습니다 - 우리가 원하는 것 (그것은 아닙니다. ISNULL, 그러나 충분히 가깝습니다) : :

SELECT [t0].[EmployeeID] AS [ID],
    (CASE
        WHEN [t2].[test] IS NULL THEN CONVERT(NVarChar(10),@p0)
        ELSE [t2].[FirstName]
     END) AS [Name]
FROM [dbo].[Employees] AS [t0]
LEFT OUTER JOIN (
    SELECT 1 AS [test], [t1].[FirstName], [t1].[ReportsTo]
    FROM [dbo].[Employees] AS [t1]
    ) AS [t2] ON ([t0].[EmployeeID]) = [t2].[ReportsTo]
-- @p0: Input NVarChar (Size = 0; Prec = 0; Scale = 0) []
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

Qed?

다른 팁

당신은 사용할 수 있습니다 ?? 기본값을 설정하려면 연산자이지만 먼저 설정해야합니다. Nullable 속성 true 당신의 DBML 필요한 필드의 파일 (xx.Online)

var hht = from x in db.HandheldAssets
        join a in db.HandheldDevInfos on x.AssetID equals a.DevName into DevInfo
        from aa in DevInfo.DefaultIfEmpty()
        select new
        {
        AssetID = x.AssetID,
        Status = xx.Online ?? false
        };

저는 종종 이 문제가 있으로 시퀀스(반대로 불연속 값).가 있는 경우 시퀀스의 수,그리고 내가 원하는 합계를 때,그들의 목록은 빈 나는 오류"InvalidOperationException:Null 값을 할당할 수 없습니다 멤버와 함께 유형 시스템입니다.Int32 이 null 이 아닌 값을 입력합니다.".

내가 이것을 해결할 수 있습으로 캐스팅 순서를 널 유형입니다.합계 다른 집계자 던지지 말라 이러한 경우의 순서 널 유형은 비어 있습니다.

그래서 예를 들어 이 같은 뭔가

MySum = MyTable.Where(x => x.SomeCondtion).Sum(x => x.AnIntegerValue);

MySum = MyTable.Where(x => x.SomeCondtion).Sum(x => (int?) x.AnIntegerValue);

두 번째 하나의 반환됩니다 0 행이 없을 때에 맞는 절이 있습니다.(첫 번째 예외가 발생하지 않을 때 행 맞).

유형이 부울 인 것처럼 보이므로 결코 null이 될 수 없으므로 기본적으로 거짓이어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top