Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# o澄清-是fromname为空-不是msg.fromname。还有其他想法吗?@ShuggyCoUk说了什么。dc.MessageItems的类型是什么?它有一个奇特的LINQ提供商吗?嗨,布莱恩。这是我自己的课。我使用LINQtoSQL,所以它是一个对象_C#_.net_Linq_Linq To Sql_Null - Fatal编程技术网

C# o澄清-是fromname为空-不是msg.fromname。还有其他想法吗?@ShuggyCoUk说了什么。dc.MessageItems的类型是什么?它有一个奇特的LINQ提供商吗?嗨,布莱恩。这是我自己的课。我使用LINQtoSQL,所以它是一个对象

C# o澄清-是fromname为空-不是msg.fromname。还有其他想法吗?@ShuggyCoUk说了什么。dc.MessageItems的类型是什么?它有一个奇特的LINQ提供商吗?嗨,布莱恩。这是我自己的课。我使用LINQtoSQL,所以它是一个对象,c#,.net,linq,linq-to-sql,null,C#,.net,Linq,Linq To Sql,Null,o澄清-是fromname为空-不是msg.fromname。还有其他想法吗?@ShuggyCoUk说了什么。dc.MessageItems的类型是什么?它有一个奇特的LINQ提供商吗?嗨,布莱恩。这是我自己的课。我使用LINQtoSQL,所以它是一个对象,基本上表示一个表。成员是像msg.FromName、msg.Email、msg.Location、msg.message Text这样的东西-但不是疯狂的提供者。所以dc.MessageItems基本上是MessageItem的集合,我只需要



o澄清-是fromname为空-不是msg.fromname。还有其他想法吗?@ShuggyCoUk说了什么。dc.MessageItems的类型是什么?它有一个奇特的LINQ提供商吗?嗨,布莱恩。这是我自己的课。我使用LINQtoSQL,所以它是一个对象,基本上表示一个表。成员是像msg.FromName、msg.Email、msg.Location、msg.message Text这样的东西-但不是疯狂的提供者。所以dc.MessageItems基本上是MessageItem的集合,我只需要知道为什么计算or运算符的第二部分,即使第一个表达式是“True”!:)谢谢你的帮助!为诺德斯干杯。正如我所说,我确信msg.FromName在本例中不为null。你们对第二部分的评估有什么看法?我说的不对吗?干杯,舒吉。我现在就浏览一下那些文件。我同意,这有点差劲-不需要“!String.IsNullOrEmpty(fromname)&&&”(我想这是我一直在测试的结果),但这仍然解决了我的问题。我已将该行更新为String.IsNullOrEmpty(fromname)| | msg.fromname.ToLower().Contains(fromname.ToLower())的位置,如您所建议的-现在可用。我现在将快速浏览文档。如果你想到别的东西,就发帖子@Ev您认为(a==null | | use(a))是合法的印象在Linq中是错误的,简单地说对不起。你有没有用修订的where子句尝试过我的扩展方法?因为像sql引擎这样的东西不能保证做那种短路评估(没有像case这样糟糕的东西),Linq系统不能保证会发生这种情况(因此有关于它的文档)。你不必写扩展名——它已经在答案中了。啊,好的。我猜你是在把数据拉回来然后过滤。这是行不通的。我将根据您的解决方案进行编辑,无论您的解决方案是什么,都必须基本上为Contains提供一个非null值,或者一起避免它(就像我所做的那样)。因此,重要的是要知道这个LINQ是否适用于对象?LINQ到SQL?LINQ到实体?等您的| |将成为快捷方式的假设仅在LINQ to对象中得到保证,因为您的代码没有被翻译(例如,转换为T-SQL)。啊,太酷了。好的,Lucas,我使用Linq到SQL。我想你真的知道我在说什么。那么你是说在Linq to SQL中,你不认为这会起作用?在LINQtoSQL中,我应该如何实现这一点?我只想说:如果传递的参数为null,那么不管是否匹配都获取记录,如果不为null,那么确保返回的每个记录都与传递的参数匹配。谢谢!Ev,如果这是linq to sql,那么短路评估根本不是完全可以依赖的东西好吧,这很酷@ShuggyCoUk。我非常感谢你的意见!你明白我在这里想做什么吗?听起来我完全错过了什么!我知道这在SQL中可以工作,在C#中也可以工作,所以Linq中肯定有某种与SQL等价的东西。我说得对吗?因此,我想说的是,在这个特定的where子句中,如果参数fromname为null,则获取所有行。如果fromname不为NULL,请确保与参数匹配。抓住我?再次感谢您的帮助,您没有使用LINQ to SQL,因为(1)方法“Boolean IsNullOrEmpty(System.String)”没有支持的SQL转换;(2)您不会得到NullReferenceException(它只会发生在客户端,而不会发生在DB上)。@Lazarus。谢谢你的评论。Linq优化了这些短路比较器,并失去了我所依赖的功能,这听起来确实可行。有没有办法在Linq强制使用?谢谢你的评论!应该提到我已经尝试了很多不同的父母选择!我正在调用ToList(),这是linq运行的时候,但不是之前。如果我不能期待同样的短路行为,那就好了。我现在对此很满意。我确实找到了一个解决办法,但我还是不太满意。我的解决方案是将String.IsNullOrEmpty(fromname)| | msg.fromname.ToLower().Contains(fromname.ToLower())更改为where((fromname==null)| |(msg.fromname.IndexOf(fromname)>=0)),所以我不假设fromname不是null。我认为这不是最好的办法。我想要的东西会变成等价于从tblSomeTable中选择*,其中@theValue为NULL或@theValue=theValue,所以如果你有任何想法,那就太好了!谢谢,你的评论让我意识到我犯了一个错误。我已经更新了我的答案。
if(ExpressionOne() || ExpressionTwo())
{
     // only ExpressionOne was evaluated because it was true
}
var messages = (from msg in dc.MessageItems
where  String.IsNullOrEmpty(fromname) || (!String.IsNullOrEmpty(fromname) && msg.FromName.ToLower().Contains(fromname.ToLower()))
select msg);
msg.FromName.ToLower().Contains(fromname.ToLower()))
String.IsNullOrEmpty(fromname) || 
(   !String.IsNullOrEmpty(fromname) && 
    msg.FromName.ToLower().Contains(fromname.ToLower())
)
String.IsNullOrEmpty(fromname) || 
msg.FromName.ToLower().Contains(fromname.ToLower())
public static class ExtensionMethods
{
    public static bool Contains(
        this string self, string value, StringComparison comparison)
    {
        return self.IndexOf(value, comparison) >= 0;
    }

    public static bool ContainsOrNull(
        this string self, string value, StringComparison comparison)
    {
        if (value == null)
            return false;
        return self.IndexOf(value, comparison) >= 0;
    }
}
var messages = (from msg in dc.MessageItems
where  msg.FromName.ContainsOrNull(
    fromname, StringComparison.InvariantCultureIgnoreCase)
select msg);
IEnumerable<MessageItem> results;
if (string.IsNullOrEmpty(fromname))
{ 
    results = from msg in dc.MessageItems 
    select msg;    
}
else
{
    results = from msg in dc.MessageItems 
    where msg.FromName.ToLower().Contains(fromname) 
    select msg;    
}
where (String.IsNullOrEmpty(fromemail)  || (msg.FromEmail.ToLower().Contains((fromemail ?? String.Empty).ToLower())))
string lowerfromname = String.IsNullOrEmpty(fromname) ? fromname : fromname.ToLower();

var messages = from msg in dc.MessageItems
               where String.IsNullOrEmpty(lowerfromname) || msg.Name.ToLower().Contains(lowerfromname)
               select msg.Name;
SELECT ... FROM ... WHERE @theValue IS NULL OR @theValue = theValue