Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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/6/multithreading/4.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#_Asp.net Mvc_Linq - Fatal编程技术网

C# LINQ中的字节数组空校验

C# LINQ中的字节数组空校验,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有两种型号: class User { int Id { get; set; } string Name { get; set; } virtual HashSet<Book> Books { get; set; } } class Book { int Id { get; set; } string Name { get; set; } int UserId { get; set; } byte[] CoverImage { get; set; }

我有两种型号:

class User
{
  int Id { get; set; }
  string Name { get; set; }
  virtual HashSet<Book> Books { get; set; }
}

class Book
{
  int Id { get; set; }
  string Name { get; set; }
  int UserId { get; set; }
  byte[] CoverImage { get; set; }
  virtual User User { get; set; }
}
从数据库返回的数据填充bool属性时遇到一些问题。获取用户和他们的书籍很简单,但向viewModel转换却很难

var usersAndBooks = dbContext.Users.Include(Books); // pseudocode here, but the real thing works
这里是我需要帮助的地方:

    var viewModel = usersAndBook.Select(u => new UserViewModel()
        {
           Id = u.Id,
           Name = u.Name,
           LatestBookName = u.Books.Count > 0 && u.Books.OrderByDescending(b => b.Id).FirstOrDefault().Name, //works OK

          //neither of these work:

           //hasCoverImage = u.Books.Count > 0 && c.Books.OrderByDescending(b => b.Id).First().CoverImage.Any()             
           //hasCoverImage = u.Books.Count > 0 && c.Books.OrderByDescending(b => b.Id).First().CoverImage.Length > 0
        }
我试图通过查看字节数组来设置hasImage值,但出现运行时错误:

“DbIsEmptyExpression需要一个集合参数。\r\n参数 名称:参数“

对于
.Any(

“LINQ中不支持LINQ表达式节点类型'ArrayLength' 给实体。”

对于
.Length>0
,我在这里找到了答案:

在这里:

这项工作:

var viewModel = usersAndBook.Select(u => new UserViewModel()
        {
           Id = u.Id,
           Name = u.Name,
           LatestBookName = u.Books.Count > 0 
                && u.Books.OrderByDescending(b => b.Id).FirstOrDefault().Name, 

           //this does work:
           hasCoverImage = u.Books.Count > 0 
                 && SqlFunctions.DataLength
                (c.Books.OrderByDescending(b => b.Id).First().CoverImage) > 0
        }
您需要使用
System.Data.Entity.SqlServer引用

我在这里找到了答案:

在这里:

这项工作:

var viewModel = usersAndBook.Select(u => new UserViewModel()
        {
           Id = u.Id,
           Name = u.Name,
           LatestBookName = u.Books.Count > 0 
                && u.Books.OrderByDescending(b => b.Id).FirstOrDefault().Name, 

           //this does work:
           hasCoverImage = u.Books.Count > 0 
                 && SqlFunctions.DataLength
                (c.Books.OrderByDescending(b => b.Id).First().CoverImage) > 0
        }

您需要使用
System.Data.Entity.SqlServer引用

.FirstOrDefault().Name
听起来很危险(属性LatestBookName)我已经更新了要测试的问题中的代码。这是对我正在做的事情的简化,所以我留下了一些空检查。这些不是我想要解决的问题。@fubo字节数组从来都不是空的,如果不使用的话就是空的。@Console
u.Books.Count>0&&u.Books.OrderByDescending(b=>b.Id)。FirstOrDefault().Name
不应该编译,但是
u.Books.OrderByDescending(b=>b.Id)。FirstOrDefault().Name
是安全的。记住在客户机上执行的内容以及转换为SQL的内容。如果没有找到
Book
对象,那么
Name
访问只会导致
null
.FirstOrDefault().Name
听起来很危险(属性LatestBookName)。我已经更新了要测试的问题中的代码。这是对我正在做的事情的简化,所以我留下了一些空检查。这些不是我想要解决的问题。@fubo字节数组从来都不是空的,如果不使用的话就是空的。@Console
u.Books.Count>0&&u.Books.OrderByDescending(b=>b.Id)。FirstOrDefault().Name
不应该编译,但是
u.Books.OrderByDescending(b=>b.Id)。FirstOrDefault().Name
是安全的。记住在客户机上执行的内容以及转换为SQL的内容。如果没有找到
Book
对象,那么
Name
访问只会导致
null