小编Jon*_*Jon的帖子

LINQ中SQL ISNULL的等价物?

在SQL中你可以运行一个ISNULL(null,'')你如何在linq查询中执行此操作?

我加入了这个查询:

var hht = from x in db.HandheldAssets
        join a in db.HandheldDevInfos on x.AssetID equals a.DevName into DevInfo
        from aa in DevInfo.DefaultIfEmpty()
        select new
        {
        AssetID = x.AssetID,
        Status = xx.Online
        };
Run Code Online (Sandbox Code Playgroud)

但是我有一个不可为空的位类型的列(xx.online)如果它为null,如何将其设置为false?

c# sql linq isnull

50
推荐指数
2
解决办法
11万
查看次数

将谓词的表达式树变换为目标另一种类型

介绍

在我目前正在处理的应用程序中,每个业务对象有两种:"ActiveRecord"类和"DataContract"类.例如,会有:

namespace ActiveRecord {
    class Widget {
        public int Id { get; set; }
    }
}

namespace DataContract {
    class Widget {
        public int Id { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

数据库访问层负责在系列之间进行转换:您可以告诉它更新a DataContract.Widget,它将神奇地创建ActiveRecord.Widget具有相同属性值的数据并保存它.

尝试重构此数据库访问层时,问题浮出水面.

问题

我想在数据库访问层中添加如下方法:

// Widget is DataContract.Widget

interface IDbAccessLayer {
    IEnumerable<Widget> GetMany(Expression<Func<Widget, bool>> predicate);
}
Run Code Online (Sandbox Code Playgroud)

以上是一个简单的通用"get"方法,带有自定义谓词.唯一感兴趣的是我传递的是表达式树而不是lambda,因为IDbAccessLayer我在里面查询一个IQueryable<ActiveRecord.Widget>; 为了有效地做到这一点(想想LINQ to SQL)我需要传入一个表达式树,所以这个方法只是要求.

障碍:参数需要从一个神奇地转换Expression<Func<DataContract.Widget, bool>>为一个Expression<Func<ActiveRecord.Widget, bool>>.

试图解决方案

我想在里面做的GetMany是:

IEnumerable<DataContract.Widget> GetMany(
    Expression<Func<DataContract.Widget, bool>> predicate)
{
    var lambda = …
Run Code Online (Sandbox Code Playgroud)

c# linq lambda expression-trees

50
推荐指数
4
解决办法
8540
查看次数

如何基于属性值禁用数据绑定ListBox项?

有没有人知道是否以及如何ListBox根据属性的值禁用数据绑定中的项目?

我想要一个DataTrigger,当某个属性是false,禁用这个项目(使其无法选择)而不影响其中的其他项目ListBox.

<ListBox>
  <ListBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Name="textBlock" Text="{Binding Description}"/>
      <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding IsEnabled}" Value="False">
          ??
        </DataTrigger>
      </DataTemplate.Triggers>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

wpf xaml listbox datatemplate

30
推荐指数
1
解决办法
2万
查看次数

Cakephp和Yii:相似/不同/速度?

我是CakePhp程序员.我决定试用Yii框架.我想知道CakePhp与Yii有什么相似之处.另外,Yii比CakePhp快得多吗?

cakephp yii

29
推荐指数
4
解决办法
2万
查看次数

为什么在类之外定义operator +或+ =,以及如何正确地执行它?

我对它们之间的差异感到有点困惑

Type  operator +  (const Type &type);
Type &operator += (const Type &type);
Run Code Online (Sandbox Code Playgroud)

friend Type  operator +  (const Type &type1, const Type &type2);
friend Type &operator += (const Type &type1, const Type &type2);
Run Code Online (Sandbox Code Playgroud)

哪种方式是首选,它们看起来像什么,什么时候应该使用?

c++ operator-overloading operators

27
推荐指数
2
解决办法
2万
查看次数

将结构数组初始化为全0的最快方法?

我正在尝试使用以下语法将结构数组初始化为全0:

STRUCTA array[MAX] = {0};
Run Code Online (Sandbox Code Playgroud)

但是,我从gcc收到以下警告:

警告:初始化程序周围缺少大括号

我做错了什么 - 有另一种/更好的方法吗?

c structure initialization

24
推荐指数
3
解决办法
3万
查看次数

为什么我不能将List <Derived>分配给List <Base>?

我定义了以下类:

public abstract class AbstractPackageCall
    {

     ...

    }
Run Code Online (Sandbox Code Playgroud)

我还定义了这个类的子类:

class PackageCall : AbstractPackageCall
    {

      ...
    }
Run Code Online (Sandbox Code Playgroud)

还有其他几个子节 AbstractPackageCall

现在我想进行以下调用:

 List<AbstractPackageCall> calls = package.getCalls();
Run Code Online (Sandbox Code Playgroud)

但我总是得到这个例外:

Error   13  Cannot implicitly convert type 'System.Collections.Generic.List<Prototype_Concept_2.model.PackageCall>' to 'System.Collections.Generic.List<Prototype_Concept_2.model.AbstractPackageCall>' 
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?这是Package#getCalls的方法

 internal List<PackageCall> getCalls()
        {
            return calls;
        }
Run Code Online (Sandbox Code Playgroud)

.net c# generics covariance

22
推荐指数
1
解决办法
7087
查看次数

工程bool比较真假两者,为什么?

示例波纹管编译,但输出相当奇怪:

#include <iostream>
#include <cstring>

struct A
{
    int a;
    char b;
    bool c;
};

int main()
{
    A v;
    std::memset( &v, 0xff, sizeof(v) );

    std::cout << std::boolalpha << ( true == v.c ) << std::endl;
    std::cout << std::boolalpha << ( false == v.c ) << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

true
true
Run Code Online (Sandbox Code Playgroud)

有人能解释为什么吗?

如果重要,我使用的是g ++ 4.3.0

c++

21
推荐指数
1
解决办法
1444
查看次数

如何按周分组日期?

我正在为我正在创建的定制应用程序编写Excel导出器,我对C#中的LINQ分组有疑问.

基本上,这个新的Excel导出器类有两个日期.然后,该班级检索此日期范围之间的所有托运.

作为此导出器的一部分,我需要能够将日期分组为几周,并获取该周的值.因此,例如,如果我给了07/12/2011和22/12/2011(dd/MM/yyyy格式),我需要将它们之间的所有货物分组为几周(每周从星期日开始).使用上述日期的理想结果是

Week 1: (consignments between 04/12/2011 and 10/12/2011) 
Week 2: (consignments between 11/12/2011 and 17/12/2011) 
Week 3: (consignments between 18/11/2011 and 24/12/2011)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# linq grouping

20
推荐指数
3
解决办法
1万
查看次数

从IEnumerable中过滤重复项

我有这个代码:

class MyObj {
    int Id;
    string Name;
    string Location;
}

IEnumerable<MyObj> list;
Run Code Online (Sandbox Code Playgroud)

我想将列表转换为这样的字典:

list.ToDictionary(x => x.Name);
Run Code Online (Sandbox Code Playgroud)

但它告诉我我有重复的密钥.如何只保留每个键的第一项?

c#

19
推荐指数
3
解决办法
1万
查看次数