【问题标题】:Using a string in a LINQ query在 LINQ 查询中使用字符串
【发布时间】:2011-04-15 09:15:42
【问题描述】:

我目前正在用 c# 开发一个 WPF 项目。该项目采用一个字符串(newMemoryRFID),该字符串在页面初始化时定义并在查询中使用。像这样

var query = 
            from c in MemoryData.Memory
                    where c.RFID == newMemoryRFID
                    select c;
        this.DataContext = query;
        this.View = ((CollectionView)(CollectionViewSource.GetDefaultView(this.DataContext)));

这会产生一个空的 DataContext

但是,当我使用与 newMemoryRFID 查询相同的测试数据时,即

var query = 
            from c in MemoryData.Memory
                    where c.RFID == "0F02D76B05"
                    select c;
        this.DataContext = query;
        this.View = ((CollectionView)(CollectionViewSource.GetDefaultView(this.DataContext)));

查询得到正确的记录。你可能会说我不是最好的程序员,所以你的答案越简单越好。并提前非常感谢

【问题讨论】:

  • 如果硬编码 newMemoryRFID 字符串时它可以工作,那么问题就出在 newMemoryRFID 上。在代码执行之前在代码中放置一个断点。然后检查newMemoryRFID 的值。那里可能有一些空白或其他东西。

标签: c# wpf linq where-clause dynamic-queries


【解决方案1】:

现在是使用调试器的时候了。听起来 newMemoryRFID 在创建查询时没有设置为“0F02D76B05”。

如果你不能踏入它,至少要这样做

Debug.WriteLine(string.Format("newMemoryRFID = {0}", newMemoryRFID); 

行前

var query = ...

【讨论】:

  • 我希望是这样,但我从头到尾都关注 newMemoryRFID,并且据我所知,它与我所期望的匹配,即 newMemoryRFID "\n0F02D76B05\r" 字符串跨度>
  • 您是否希望 newMemoryRFID 包含 \n 和 \r?看起来你有额外的字符。尝试使用 newMemoryRFID.Trim()。
  • 我没想到他们,但我尝试使用 .Trim() 并没有帮助:(
  • 这应该将 false 写入调试跟踪(或者您可以在即时窗口或其他任何地方检查它)。 Debug.WriteLine(string.Format("newMemoryRFID == \"0F02D76B05\" is {0}", newMemoryRFID == "0F02D76B05"); 那些额外的不可打印字符意味着这两个字符串不一样。你应该只需要清理你从源代码中得到的任何东西。.Replace("\n", "").Replace("\r", "") 是一种快速而简单的方法。看看正则表达式或您的 RFID 阅读器的通信规范(txt2re.com 可能会在此处为您提供帮助)。
【解决方案2】:

尝试在开头和结尾处修剪字符串以查找可能导致字符串匹配失败的空格。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多