문제
에 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이 될 수 없으므로 기본적으로 거짓이어야합니다.