Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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# 如果字段为空,如何用Linq替换值?_C#_Linq - Fatal编程技术网

C# 如果字段为空,如何用Linq替换值?

C# 如果字段为空,如何用Linq替换值?,c#,linq,C#,Linq,我有以下报告: var menuItems = _menuRepository.GetPk(pk) .Where(m => m.Status == "00") .OrderBy(m => m.Order) .Select(m => new MenuItem { PartitionKey = m.Partition

我有以下报告:

var menuItems = _menuRepository.GetPk(pk)
                .Where(m => m.Status == "00")
                .OrderBy(m => m.Order)
                .Select(m => new MenuItem
                {
                    PartitionKey = m.PartitionKey,
                    RowKey = m.RowKey,
                    Order = m.Order,
                    Order1 = m.Order.Substring(0, 1),
                    Order2 = m.Order.Substring(2, 1),
                    Order3 = m.Order.Substring(4, 1),
                    Order4 = m.Order.Substring(6, 2),
                    Title = m.Title,
                    Type = m.Type,
                    Link = m.Link,
                    TextLength = m.TextLength
                });
如果存在订单为null或空的记录,则此操作失败。如果m.Order为null或空,有没有一种方法可以替换一个由8个零组成的字符串,并用一个零替换所有的Order.substring

Order1 = m.Order == null ? "0" : m.Order.Substring(0, 1)
条件运算符(?:)也称为三值运算符,根据布尔表达式的值返回两个值中的一个

<boolean condition> ? <value returned if true> : <value returned if false>;
?:;

您可以使用运算符:

var menuItems = _menuRepository.GetPk(pk)
    .Where(m => m.Status == "00")
    .OrderBy(m => m.Order)
    .Select(m =>
                {
                    var orderOrEmpty = m.Order ?? "00000000";
                    return new MenuItem
                                {
                                    PartitionKey = m.PartitionKey,
                                    RowKey = m.RowKey,
                                    Order = m.Order,
                                    Order1 = orderOrEmpty.Substring(0, 1),
                                    Order2 = orderOrEmpty.Substring(2, 1),
                                    Order3 = orderOrEmpty.Substring(4, 1),
                                    Order4 = orderOrEmpty.Substring(6, 2),
                                    Title = m.Title,
                                    Type = m.Type,
                                    Link = m.Link,
                                    TextLength = m.TextLength
                                };
                });

如果
null
或为空,则听起来您希望将
m.Order.SubString
调用的结果替换为0。方法是,如果
m.Order
值为null/empty,则只使用所有0的字符串

.Select(m => {
   var order = m.Order ?? "00000000";
   return new MenuItem {      
     PartitionKey = m.PartitionKey,
     RowKey = m.RowKey,
     Order = m.Order,
     Order1 = order.Substring(0, 1),
     Order2 = order.Substring(2, 1),
     Order3 = order.Substring(4, 1),
     Order4 = order.Substring(6, 2),
     Title = m.Title,
     Type = m.Type,
     Link = m.Link,
     TextLength = m.TextLength
  }});

我将编写一个扩展方法
IfNotNull
,并将其用作

m.Order.IfNotNull(s=>s.Substring(0,1),"0") 
//or
m.Order.IfNotNull(s=>s.Substring(6,2),"00")
//or
m.Order.IfNotNull(s=>s.Substring(6,2))

公共静态类MyExtensions
{
公共静态TOut IfNotNull(此T目标,Func valueFunc,TOut defValue=default(TOut))
T:在哪里上课
{
返回目标==null?定义值:valueFunc(目标);
}
}

什么失败了?子字符串或OrderBy?要根据他的问题调整它,应该是
Order1=m.Order==null?“00000000”:m.Order.Substring(0,1)
您可以阅读更多关于三元运算符的内容,我认为,希望整个
顺序
“00000000”
。我更正了我的例子。你是说空合并运算符
.Select(m => {
   var order = m.Order ?? "00000000";
   return new MenuItem {      
     PartitionKey = m.PartitionKey,
     RowKey = m.RowKey,
     Order = m.Order,
     Order1 = order.Substring(0, 1),
     Order2 = order.Substring(2, 1),
     Order3 = order.Substring(4, 1),
     Order4 = order.Substring(6, 2),
     Title = m.Title,
     Type = m.Type,
     Link = m.Link,
     TextLength = m.TextLength
  }});
m.Order.IfNotNull(s=>s.Substring(0,1),"0") 
//or
m.Order.IfNotNull(s=>s.Substring(6,2),"00")
//or
m.Order.IfNotNull(s=>s.Substring(6,2))
public static class MyExtensions
{
    public static TOut IfNotNull<T, TOut>(this T target, Func<T, TOut> valueFunc,TOut defValue=default(TOut))
        where T : class
    {
        return target == null ? defValue : valueFunc(target);
    }
}