我有这样的事情:
public Assignments GetAssignmentsForProider(string provider_k, string recordType)
{
if (recordType == "A")
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k
&& ea.Active == true
&& ea.RecordType == "A"
select ea;
return query.FirstOrDefault();
}
else if (recordType == "E")
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k
&& ea.RecordType == "E"
select ea;
return query.FirstOrDefault();
}
}
两个问题:
不编译!因为它也需要一个默认的返回语句而且我不确定要返回什么,但是在我的程序中,如果条件发生,它们将永远不会发生。我总是在第一个或第二个。
实际上他们所有的不同之处在于我们检查Active == true
的第一个,而在第二个我们没有检查{{1}}。那么有更好的写作方式吗?
答案 0 :(得分:2)
这样的东西?
public Assignments GetAssignmentsForProider(string provider_k, string recordType)
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k
&& ea.RecordType == recordType
&& (recordType == "E" ? true : ea.Active)
select ea;
return query.FirstOrDefault();
}
这应该满足你的需要。
答案 1 :(得分:1)
我可能会这样写:
public Assignments GetAssignmentsForProider(string provider_k, string recordType)
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k &&
ea.RecordType == recordType
select ea;
if (recordType == "A")
return query.Where(ea => ea.Active).FirstOrDefault();
else if (recordType == "E")
return query.FirstOrDefault();
return null;
}
答案 2 :(得分:1)
链接你的条件的一种方法......
public Assignments GetAssignmentsForProider(string provider_k, string recordType)
{
var query = from ea in this.Context.Assignments
where ea.Provider_K == provider_k
select ea;
if (recordType == "A")
{
query = from q in query
where q.Active == true
&& q.RecordType == "A"
select q;
}
else if (recordType == "E")
{
query = from q in query
where q.RecordType == "E"
select q;
}
return query;
}
但是BjarkeSøgaard有更好的方法来过滤记录类型,因为你的标准参数直接匹配查询数据......所以你可以直接使用它。