【问题标题】:LInq query return value specific fieldLInq 查询返回值特定字段
【发布时间】:2018-06-08 10:45:00
【问题描述】:

我有 2 个表如下:

猫桌

  • 分类代码
  • 猫名

狗桌

  • 狗码
  • 分类代码
  • 姓名代码

所以我想写一个查询,返回表中所有数据的列表 CatTable 另外,如果在 DogTable 表中,“CatCode”字段中的值与 CatTable.CatCode 和“NameCode”字段相同”为空,则应在“DogTable.CatCode”字段中返回值“false

例子

var query = from c in CatTable 
            from d in DogTable
            where c.CatCode == d.CatCode 
            select new { c.CatCode, c.CatName, d.CatCode }

您对此有什么建议吗?

【问题讨论】:

  • 你试过什么?狗/猫示例对于理解您的用例并不是特别有帮助。then should return a value "false" in the field “DogTable.CatCode” 根据您之前的描述,CatCode 不是布尔值,所以您在这里问的内容没有意义。即使您的意思是字符串“false”,这也是一种糟糕的方法(并且具有XY problem 或字符串类型方法的所有特征。)。
  • 尝试类似:new { CatCode = c.CatCode == d.CatCode && (d.NameCode == null || d.NameCode == "") },您将获得一个名为 CatCode 的 bool 属性,并且您可以像已经完成的那样选择您想要的其他属性。这是我在知识有限的情况下所能提供的最好的,不是 100% 清楚你想要什么,而且不知道你正在使用的数据类型也无济于事

标签: c# .net linq


【解决方案1】:

一个简单的版本是使用Any 在最后一个字段上返回您想要的逻辑的布尔值

var query = CatTable.Select(ct => new 
{ 
    CatCode = ct.CatCode, 
    CatName = ct.CatName, 
    DogCatCode = !DogTable.Any(dt => dt.CatCode == ct.CatCode && dt.NameCode == "")
});

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多