یافتن مقادیر نال در Entity framework
نویسنده: وحید نصیری
تاریخ: ۱۳۹۱/۰۶/۲۶ ۲۱:۲۱
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int? Age { get; set; }
}
string name = null; var list1 = ctx.Users.Where(x => x.Name == name).ToList();
SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name], [Extent1].[Age] AS [Age] FROM [dbo].[People] AS [Extent1] WHERE [Extent1].[Name] = @p__linq__0 -- p__linq__0 (dbtype=String, size=-1, direction=Input) = null
var list2 = ctx.Users.Where(x => !x.Age.HasValue).ToList();
int? age = null; var list2 = ctx.Users.Where(x => object.Equals(x.Age, age)).ToList();
var list1 = ctx.Users.Where(x => string.IsNullOrEmpty(x.Name)).ToList();
string name = null; var list1 = ctx.Users.Where(x => name == null ? x.Name == null : x.Name == name).ToList();
var list1 = ctx.Users.Where(x => x.Name == null).ToList();
ممنون از مطلب مفیدتون راستش من به این نکته ای که فرمودین توجه نکرده بودم. من دستوراتی را روی دیتابیس northwind اجرا کردم که اولین دستور به این صورت بود:
rg = ent.regions.where(x => x.regionid != null).tolist();
این دستور در sql server به اینصورت تبدیل میشود :
select [extent1].[regionid] as [regionid], [extent1].[regiondescription] as [regiondescription] from [dbo].[region] as [extent1]
آیا اینکه اصلا در دستور sql ما چک کردن برای null نداریم به این خاطر است که ef بطور اتوماتیک
چک میکند که فیلد regionid از نوع nullable هست و چنانچه نباشه اصلا شرط رو دخالت نمیده؟
من در گام بعدی این دستور را اجرا کردم :
rg = ent.regions.where(x => x.regiondescription == null).tolist();
که خروجی آن به این صورت بود:
select cast(null as int) as [c1], cast(null as varchar(1)) as [c2] from ( select 1 as x ) as [singlerowtable1] where 1 = 0
میخواستم اگر ممکنه کمی راجع به این دستور توضیح بفرمایید آیا این دستور همون کار is null رو انجام میده یا خیر.
باز هم سپاسگزارم
var list1 = ctx.Users.Where(x => x.Name != null).ToList();
SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name], [Extent1].[Age] AS [Age] FROM [dbo].[People] AS [Extent1] WHERE [Extent1].[Name] IS NOT NULL
var list2 = ctx.Users.Where(x => x.Name == null).ToList();
SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name], [Extent1].[Age] AS [Age] FROM [dbo].[People] AS [Extent1] WHERE [Extent1].[Name] IS NULL