рд▓реЗрдЦ рдореЗрдВ, рдореИрдВрдиреЗ SQL рдХреЛ LINQ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред рдпрджрд┐ рдЖрдк рдПрдХ .NET рдЧреБрд░реБ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдЙрдмрд╛рдК рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП - рд╕реНрд╡рд╛рдЧрдд рд╣реИ!
рдЖрдЗрдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдХрд╛рдИ рд╣реИ "рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкреНрд░рдХрд╛рд░ред" рдПрдХ рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдПрдХ рдорд╛рдирд╡-рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдирд╛рдо рдФрд░ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдирд╛рдо рд╣реИ - рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рдХреЛрдб рд╕реЗ рдЗрд╕ рдЗрдХрд╛рдИ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдХреЛрдб рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
class ActionType { public int id; public string systemname; public string name; }
var ActionTypes = new ActionType[] { new ActionType { id = 1, systemname = "Registration", name = "" }, new ActionType { id = 2, systemname = "LogOn", name = " " }, new ActionType { id = 3, systemname = null, name = " " } };
рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╡рд╛рд▓реА рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рд╕рд╣рд╛рдпрдХ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ LINQ рд╕реЗ SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЧрдИ рдереАред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХреНрд╢рди рдЯрд╛рдЗрдк
NotExistingActionType рд╣реИ ред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
var resultForObjects = ActionTypes.All(actionType => actionType.systemname != "NotExistingActionType"); var context = new LinqForHabr.DataClasses1DataContext(); var resultForLTS = context.ActionTypes.All(actionType => actionType.SystemName != "NotExistingActionType"); Console.WriteLine("Result for objects: " + resultForObjects + "\nResult for Linq to sql: " + resultForLTS); Console.ReadLine();
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрд╡рд╛рдм рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЕрдЬреАрдм рд╣реИред рдЖрд╡реЗрджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛:
рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо: рд╕рддреНрдп
LINQ to sql рдХрд╛ рдкрд░рд┐рдгрд╛рдо: рдЧрд▓рдд
рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП "рд╕рдорд╛рди рд╡рд┐рдзрд┐" рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рди рдХреНрдпреЛрдВ рд▓реМрдЯрд╛рддреА рд╣реИ? рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВред рдкрд╣рд▓рд╛ рдореЗрдореЛрд░реА рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдПрдХ SQL рдХреНрд╡реЗрд░реА рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдПрдХ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрдВ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдо рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдирд╛рдо рдХреЗ рд╕рд╛рде рдореМрдЬреВрдж рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕ рд╕рдордп, рджреЛ
рд░рдирдЯрд╛рдЗрдореНрд╕ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдВрддрд░ рдкреНрд░рдХрдЯ рд╣реЛрддреЗ рд╣реИрдВ: .NET рдХреЗ рд▓рд┐рдП, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
null! = ObjRef рд╕рдЪ рд╣реИ (рдЬрдм рддрдХ рдХрд┐
objRef рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ ), рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рд╕рд┐рд╕реНрдЯрдо рдирд╛рдо
NotExistingActionType " рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИрдВред
рд▓реЗрдХрд┐рди LINQ to SQL рдПрдХреНрд╕рдкреНрд░реЗрд╢рди SQL рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ SQL рдореЗрдВ
NULL рдХреА рддреБрд▓рдирд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╣реЛрддреА рд╣реИред
NULL == рдХрд╛ рдорд╛рди
, рдХреБрдЫ, NULL! = рдХреБрдЫ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
NULL == рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрдЧреА, рдпрд╣ рдорд╛рдирдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП "рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдирд╛рдо рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ
NotExistingActionType " рдФрд░ рд╕рддреНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐
NULL-= 'NotExistingActionType' -! рдПрдХ рдЭреВрдаред
рдЕрдм рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╡рд░реНрддрдорд╛рди рд╢реЗрд╖ рд░рд╛рд╢рд┐ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ:
class User { public int id; public int balance; public string name; }
var users = new User[] { new User { id = 1, name = "", balance = 0 }, new User { id = 2, name = "", balance = 0 } };
рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рдЦрд╛рд▓реА рд╕реЗрдЯ рдкрд░ рд░рд╛рд╢рд┐ рдХреНрдпрд╛ рд╡рд╛рдкрд╕ рдЖрдиреА рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдкрд╖реНрдЯ рдорд╛рди 0 рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рднреА, рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░реЗрдВ:
var resultForObjects = users.Where(user => user.id < 0).Sum(user => user.balance); var context = new LinqForHabr.DataClasses1DataContext(); var resultForLTS = context.Users.Where(user => user.Id < 0).Sum(user => user.Balance); Console.WriteLine("Result for objects: " + resultForObjects + "\nResult for Linq to sql: " + resultForLTS); Console.WriteLine(context.ActionTypes.First().Name); Console.ReadLine();
рдкрд░рд┐рдгрд╛рдо рдлрд┐рд░ рд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рд╣рдо рдЗрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрдЧрд╛:
System.InvalidOperationException: "NULL рдорд╛рди рдХреЛ рдЙрд╕ рд╕рджрд╕реНрдп рдХреЛ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдПрдХ System.Int32 рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ NULL рдорд╛рдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред"
рдЬреЛ рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░реЗ рдХреЙрд▓ рдХреЛ SQL рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рд╕рд╛рдорд╛рдиреНрдп
IEnumerable рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП,
Sum рдПрдХ рдЦрд╛рд▓реА рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП 0 рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦреЗ рдмрд┐рдирд╛ рдЖрд╕рд╛рди рд╣реИ (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рдЕрдВрдд рдореЗрдВ, рдЗрд╕реЗ рдпрд╣рд╛рдБ рдкрдврд╝реЗрдВ
msdn.microsoft.com/en-us/library/bb549046 )ред рд╣рд╛рд▓рд╛рдБрдХрд┐, DBMS рд░рд┐рдХреНрдд рд╕реЗрдЯ рдХреА рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛
NULL рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛
рд╣реИ (рдЪрд╛рд╣реЗ рд╡рд╣ рд╕рд╣реА рд╣реЛ рдпрд╛ рдирд╣реАрдВ - рдкреНрд░рд╢реНрди рдмрд╣реБрдд рд╕рдордЧреНрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рддрдереНрдп рд╣реИ), рдФрд░ LINQ, рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдмрдЬрд╛рдп
рдЕрд╢рдХреНрдд рд▓реМрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреБрд░рдВрдд рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдЬрдЧрд╣ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдмреЗрд╣рдж рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдирдЬрд╝рд░ рд░рдЦреЗрдВ:
var resultForLTS = context.Users.Where(user => user.Id < 0).Sum(user => (int?)user.Balance) ?? 0;
рдпрд╣рд╛рдБ,
рд╕рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░рд┐рдЯрд░реНрди рдорд╛рди
рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди
рдЕрд╢рдХреНрдд рдЗрдВрдЯ (рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдЬреЛ LINQ рдХреЛ
рдЕрд╢рдХреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ?? рдЗрд╕
рд╢реВрдиреНрдп рдХреЛ 0 рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред
рдЦреИрд░, рдЖрдЦрд┐рд░реА рдЙрджрд╛рд╣рд░рдгред рд╣реИрд░рд╛рдиреА рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдХреБрдЫ рд╕рдВрд╢реНрд▓рд┐рд╖реНрдЯ рдЪреАрдиреА рдорд┐рд▓рддреА рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ
рд╕реНрдерд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдм рдЕрдкрдиреЗ рд╢рд╣рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛:
class User { public int id; public int balance; public string name; public Location location; } class Location { public int id; public string Name; }
рд╣рдо рдХреЛрдИ рднреА
рд╕реНрдерд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрджрд▓реЗрдВрдЧреЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд░реБрдЪрд┐ рдХрд╛ рд╣реИ:
var resultForObjects = users.Select(user => user.location == null ? " " : user.location.Name == null ? " " : user.location.Name) .First(); var context = new LinqForHabr.DataClasses1DataContext(); var resultForLTS = context.Users.Select(user => user.Location == null ? " " : user.Location.name == null ? " " : user.Location.name) .First();
рджреЛрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо "рд╕реНрдерд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ" рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛:
var resultForLTS = context.Users.Select(user => user.Location.name ?? " ");
рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕реНрдкрд╖реНрдЯ
NullReferenceException рд╣реИ (рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдХреЛрдИ
рд╕реНрдерд╛рди рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛, рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдирд╣реАрдВ рднреВрд▓рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреЛрдб рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ .NET, рд▓реЗрдХрд┐рди SQL рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ DBMS рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдХреЛрдб рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХреНрд╡реЗрд░реА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА (LINQPad рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП):
SELECT COALESCE([t1].[name],@p0) AS [value] FROM [Users] AS [t0] LEFT OUTER JOIN [Locations] AS [t1] ON [t1].[Id] = [t0].[LocationId]
рдпрд╣ "рдЯреНрд░рд┐рдХ" рд╣рдореЗрдВ LINQ рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рдЬрдВрдЧрд▓реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдирд┐рд╖реНрдХрд░реНрд╖:
рдЬрдм рд╣рдо рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпреЗ рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдРрд╕рд╛ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдмрд╛рдд рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдпрд╛ рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╣рдо рдХреНрдпрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП - RTFM!