仍然在努力解决这个问题,而且似乎是围成一圈。
我有以下代码让我疯了。它应填充要在自动填充文本框中使用的项目列表:
public string[] GetAutoComplete(string prefixText, int count)
{
string memberid = HttpContext.Current.Session["MemberID"].ToString();
string locationid = HttpContext.Current.Session["LocationID"].ToString();
string inhouse = HttpContext.Current.Session["Inhouse"].ToString();
string supplier = HttpContext.Current.Session["Supplier"].ToString();
string groupw = HttpContext.Current.Session["Group"].ToString();
string external = HttpContext.Current.Session["External"].ToString();
MyEnts autocomplete = new MyEnts();
var r = from p in autocomplete.tblAutoCompletes
where p.MemberId == memberid && p.LocationId == locationid && p.ACItem.Contains(prefixText)
select p.ACItem;
if (inhouse == "Inhouse")
r = r.Where(p => p == inhouse);
if (supplier == "Supplier")
r = r.Where(p => p == supplier);
if (groupw == "Group")
r = r.Where(p => p == groupw);
if (external == "External")
r = r.Where(p => p == external);
r.OrderBy(p => p);
return r.ToArray();
我尝试使用动态where子句检索以下内容。
如果inhouse =“Inhouse”,则项目列表应包含“Inhouse”一词。如果是inhouse!=“Inhouse”,则应将“Inhouse”一词排除在列表之外。
然后应该在不同的where子句中应用相同的逻辑,即供应商,集团,外部。
我真的尝试了很多不同的方法,但我不能为我的生活让事情发挥作用,这让我感到沮丧。
如果有人能提出这样做的方法,那么如果我们的路径穿越,你将获得一个大吻或一个大冰霜啤酒。
答案 0 :(得分:1)
这里不完全确定您的问题,但如果您想要排除,则代码不应该像
if (inhouse == "Inhouse")
r = r.Where(p => p == inhouse);
else
r = r.Where(p => p != inhouse);
哦!如果你想要排除,那么代码应该是
if (inhouse != "Inhouse")
r = r.Where(p => p != inhouse);
答案 1 :(得分:0)
如果在编译时知道要包含/排除的值集(在您的示例中似乎是这种情况),我认为可以使用一个查询来管理:
string memberid = HttpContext.Current.Session["MemberID"].ToString();
string inhouse = HttpContext.Current.Session["Inhouse"].ToString();
string supplier = HttpContext.Current.Session["Supplier"].ToString();
bool includeInHouse = (inhouse == "Inhouse");
bool includeSupplier = (supplier == "Supplier");
MyEnts autocomplete = new MyEnts();
var r = from p in autocomplete.tblAutoCompletes
where (p.MemberId == memberid && p.LocationId == locationid && p.ACItem.Contains(prefixText))
&& (includeInHouse || (p.ACItem != "InHouse"))
&& (includeSupplier || (p.ACItem != "Supplier"))
select p.ACItem;
r.OrderBy(p => p.ACItem);
return r.ToArray();
为简洁起见,我已经删除了几个案例。
答案 2 :(得分:-1)
你的每个Where子句是否只需要包含一个包含标准而一些不包含?
if (inhouse == "Inhouse")
r = r.Where(p => p.Contains(inhouse) && !p.Contains("Supplier") && !p.Contains("Group") && !p.Contains("External"));
答案 3 :(得分:-1)
排序。
var r =来自autocomplete.tblAutoCompletes中的p 其中p.MemberId == memberid&& p.LocationId == locationid&& p.ACItem.Contains(prefixText) 选择p.ACItem;
if (inhouse != "Inhouse")
r = r.Where(p => p != "Inhouse");
if (supplier != "Supplier")
r = r.Where(p => p != "Supplier");
if (groupw != "Group")
r = r.Where(p => p != "Group");
if (external != "External")
r = r.Where(p => p != "External");
r = r.OrderBy(p => p);
return r.ToArray();
我必须在引号中设置异常,因为会话值不合适,并且不会从列表中选择任何内容。
感谢所有那些贡献并帮助我的人。