在数据库中的我需要几别名数据被用于一个ID(捕捉所有ID)和同样的情况对于这个ID需要进行比较的值。 LINQ不允许但是我使用分机或功能,通过将选择记录,或者我错在这里做一些事情。
比方说,空,“_”,“”和“默认”是用于捕捉所有ID,其中任何其他数值应被视为一个单独的值更多钞票值。
我正在寻找一种方式来产生一个选择LINQ其在清洁和维护的方式匹配aliasses。
似乎什么工作原理是:
using (DataContext context = new DataContext())
{
var q = (from c in context.BasketContents
where
(c.ID+" ").Replace("Default", "").Replace("_", "")
==
(Value+" ").Replace("Default", "").Replace("_", "")
select c);
}
或者这也适用:
where ((c.ID==null |c.ID=="Default" | c.ID=="_" | c.ID=="") &
(Value==null |Value=="Default" | Value=="_" | Value=="")) |
(c.ID==Value))
这是更糟:)
由于这种比较需要相当大数量的查询来进行我想用一个扩展,或功能,所以我想结合以下几点:
private bool IsSameID(string a1, string a2)
{
return ((a1 == null | a1 == "Default" | a1 == "_" | a1 == "")
&& (a2 == null | a2 == "Default" | a2 == "" | a2 == "_"))
| (a1 == a2) ? true : false;
}
与查询:
using (DataContext context = new DataContext())
{
var q = (from c in context.BasketContents
where
IsSameID(c.ID,Value)
select c);
}
这将引发以下异常:布尔“IsSameID(System.String,System.String)”没有支持转换为SQL
我也写了将采取替代了护理的扩展方法:
public static string DeAlias(this string a)
{
return (a == null | a == "Default" | a == "_" | a == "") ? "" : a;
}
所以我可以比较ID.DeAlias() == Value.DeAlias()
但是这基本上有同样的问题。
所以我在做什么错在这里?