Linq查询具有默认值 . 如果在DB Table中找不到此值,则应该从object获取默认值,稍后将在此表中添加新行 .
它应该是这样的,但这不起作用:
var name_country = (from m in ctx.person
where (m.name == oPerson.name || m.country == oPerson.country)
select new
{
m.name, m.country
}
).DefaultIfEmpty
(
oPerson.name,
oPerson.country
).FirstOrDefault();
如何在DefaultIfEmpty中设置此默认值???
新编辑:这是我想要作为一个查询:
string name = (from m in ctx.person
where (m.name == oPerson.name || m.country == oPerson.country)
select
m.name
).DefaultIfEmpty
(
oPerson.name,
).FirstOrDefault();
string country = (from m in ctx.person
where (m.name == oPerson.name || m.country == oPerson.country)
select
m.country
).DefaultIfEmpty
(
oPerson.country
).FirstOrDefault();
3 回答
这将与 the member-layout is identical 一样长 .
这是有效的,因为匿名类型在运行时是匿名的...请阅读MSDN-entry以获取有关此主题的更多信息:
除了我宁愿去找
??
......编辑:这是working fiddle
你正在寻找DefaultIfEmpty的这个重载
您应该创建一个新的匿名对象,设置它的属性,并将其传递给构造函数 .
假设你有一个类似的
Person
类你想在这里做的是创建
Person
的新实例(如果没有从你的数据库查询返回一个,它将自动设置每个特定属性类型的默认值)刚刚意识到你要默认
oPerson
实例中的字段而不是新实例 . 因此,假设oPerson
也是具有完全相同成员结构的匿名对象,您可以这样做