LinQ查询的Where条件

3
我正在尝试将数据导入新的数据库,但旧数据库中的某些列为空。在我的其中一个方法中,我使用以下查询获取记录,正如我已经提到的,行中有一列对于某些记录来说是空值。
Guid nameGuid= new guid('CCECE54B-EE14-4463-8A0B-02C72679334A')

MySubQuery = from a in MainQuery
              where a.Table1.Id.Equals(nameGuid)
        Select a;

我想检查a.Table1.Id的值,如果等于null,则仍然要获取该行但忽略where条件。
在Linq查询中使用三元运算符或其他方法来完成我的任务,有什么建议吗?
3个回答

9
听起来你想要的是:
MySubQuery = from a in MainQuery
             where a.TableId.Id Is Nothing OrElse a.Table1.Id.Equals(nameGuid)

假设我的VB代码是正确的... 在C#中,我只需编写以下代码:
var query = from a in mainQuery
            where a.TableId.Id == null || a.TableId.Id == nameGuid
            select a;

或直接使用扩展方法:

var query = mainQuery.Where(a => a.TableId.Id == null || 
                                 a.TableId.Id == nameGuid);

1

这样怎么样:

MySubQuery = from a in MainQuery
             where a.Table1.Id == null || a.Table1.Id.Equals(nameGuid)
             select a;

或者我错过了什么?

编辑:

我所错过的,正是Skeet先生发现的。这是VB。好吧,我将让它保留作为C#示例。


0
 var datarows = (from row in dt.AsEnumerable()
                            where row.Field<Guid>("Id") == new 
                 Guid(ddlCode.SelectedValue.ToString())
                            select row);

之后

     DataTable newDt=datarows.CopyToDataTable();
     var sampleName=newDt.Rows[0]["SampleName"].ToString(); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接