我正在尝试针对实体框架核心2.0 DbContext在Linq中实现左外部联接。将查询转换为SQL,而不是在本地进行评估,这一点很重要。我已经查看了几种StackOverflow解决方案,其中包括一个不错的解决方案,但是没有一个使用EF Core。
我得到的问题是EF Core为该DefaultIfEmpty()方法返回以下警告/错误:
The LINQ expression 'DefaultIfEmpty()' could not be translated and will be evaluated locally
如果没有该DefaultIfEmpty()方法,则使用INNER JOIN。我的LINQ查询看起来像这样:
var join = context.Portfolios
.Where(p => p.IsActive)
.GroupJoin(context.BankAccounts,
prt => prt.Id,
bnk => bnk.PortfolioId,
(prt, bnks) => new {Portfolio=prt,Account=bnks.DefaultIfEmpty()})
.SelectMany(r => r.Accounts.DefaultIfEmpty(),
(p, b) => new
{
Id = p.Portfolio.Id,
BankAccount = b.BankAccountNumber,
BankRef = b.BeneficiaryReference,
Code = p.Portfolio.Code,
Description = p.Portfolio.DisplayName
});
Run Code Online (Sandbox Code Playgroud)
有谁知道解决这个问题的方法吗?
这是我的代码.我正在尝试使用比较委托进行比较.(在visual studio code .net core中).
using System;
using System.Collections.Generic;
namespace comparisionProject
{
public class student
{
public int SId { get; set; }
public string name { get; set; }
public int FullMarks { get; set; }=600;
public int Marks { get; set; }
}
public class tester
{
public static int CompareNames(student std1, student std2)
{
return std1.name.CompareTo(std1.name);
}
static void Main(string[] args)
{
student s1 = new student(){SId=101 , name = "kalu",Marks = 456 };
student s2 = …Run Code Online (Sandbox Code Playgroud) 我有以下代码,即create一个新的zip文件,然后add entry使用NoCompressionie 将该文件压缩到该文件,ZERO compression ratio然后尝试将其作为普通文本读取。
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
using (FileStream zipToOpen = new FileStream(@"d:\release.zip", FileMode.Create))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create))
{
ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt", CompressionLevel.NoCompression);
using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
{
writer.WriteLine("Information about this package.");
writer.WriteLine("========================");
}
}
}
string text = System.IO.File.ReadAllText(@"d:\release.zip\Readme.txt");
Console.WriteLine("Contents of WriteText.txt = {0}", text);
}
}
}
Run Code Online (Sandbox Code Playgroud)
zip文件及其条目均已创建,我可以从Windows资源管理器中访问它们,但是一旦代码尝试读取它,它将得到以下错误: …
这是我的示例代码:
CodeSnippet 1:此代码在我的文件存储库服务器中执行,并使用WCF服务将文件作为编码字符串返回:
byte[] fileBytes = new byte[0];
using (FileStream stream = System.IO.File.OpenRead(@"D:\PDFFiles\Sample1.pdf"))
{
fileBytes = new byte[stream.Length];
stream.Read(fileBytes, 0, fileBytes.Length);
stream.Close();
}
string retVal = System.Text.Encoding.Default.GetString(fileBytes); // fileBytes size is 209050
Run Code Online (Sandbox Code Playgroud)
代码片段2:客户端框,需要PDF文件,接收编码的字符串并转换为PDF并保存到本地.
byte[] encodedBytes = System.Text.Encoding.Default.GetBytes(retVal); /// GETTING corrupted here
string pdfPath = @"C:\DemoPDF\Sample2.pdf";
using (FileStream fileStream = new FileStream(pdfPath, FileMode.Create)) //encodedBytes is 327279
{
fileStream.Write(encodedBytes, 0, encodedBytes.Length);
fileStream.Close();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作绝对精美Framework 4.5,4.6.1
当我在Asp.Net Core 2.0中使用相同的代码时,它无法正确转换为字节数组.我没有收到任何运行时错误,但是最终的PDF在创建后无法打开.pdf文件损坏时引发错误.
我也试过了Encoding.Unicode和Encoding.UTF-8.但是为最终PDF获得相同的错误.
另外,我注意到当我使用Encoding.Unicode时,至少原始字节数组和结果字节数组大小相同.但是其他编码类型也与字节大小不匹配.
那么,问题是,在.NET Core 2.0中,System.Text.Encoding.Default.GetBytes被破坏了吗?
我已经编辑了我的问题以便更好地理解. Sample1.pdf存在于不同的服务器上,并使用WCF进行通信,以将数据传输到存储文件编码流的Client,并转换为Sample2.pdf
希望我的问题现在有道理.
考虑以下C#代码:
IntPtr native = GetNativeError(/* parameters here */);
return new ManagedError(native);
Run Code Online (Sandbox Code Playgroud)
然后客户端代码以下列方式检查错误:
ManagedError err = /* get it with the code above */;
if(err.IsOk()) {
/* Success */
}
Run Code Online (Sandbox Code Playgroud)
这里的内存分配可以以if语句为代价来保存:
IntPtr native = GetNativeError(/* parameters here */);
if(native == IntPtr.Zero) {
return null;
} else {
return new ManagedError(native);
}
Run Code Online (Sandbox Code Playgroud)
然后客户端代码将检查错误,如下所示:
ManagedError err = /* get it with the code above */;
if(err == null) {
/* Success */
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:哪种方法更快?第一个有额外的内存分配.第二个是附加if声明.
更新:我的意思是,在成功案例中.错误情况很少发生,可以慢.
请不要将此视为重复的问题.我要将我的ASP.NET RESTful web-api(.Net Full)项目迁移到.Net Standard或者.Net Core我面临一个严重的问题,我在其他类似的问题中找不到答案.
我正在寻找的这个问题是要实现,虽然我可以选择.Net Core,为什么我要定位我的库程序集.Net Standard?
也许一个原因是让这些组件准备好在.Net Framework项目中使用它们.无论如何,还有其他理由说服我保持目标.Net Standard吗?
注意:我不需要保留.Net Full我的项目版本我只想拥有cross-platform它的版本.
我正在尝试将数组转换为类.所以我得到了数组,然后使用JsonConvert对其进行序列化,如下所示:
var gameResponse = GetGame(Id);
var returnedArray = gameResponse.Result.Results;
var json = JsonConvert.SerializeObject(returnedArray);
var result = JsonConvert.DeserializeObject<T>(json);
Run Code Online (Sandbox Code Playgroud)
我可以在Visual Studio调试模式下看到这个结果,"json"看起来像这样:
[
{
\"CreatorId\":\"41c5321e-6f37-4d4f-92f7-fc381be0fc62\",
\"GameId\": \"3938\",
\"Type\": \"2\",
\"CreateDate\": \"1/2/2017\",
\"TeamId\": \"2394\",
\"LeaderId\": \"34922\",
\"CountryCode\": \"23\",
\"SalesRank\": \"4\",
\"Title\": \"Space Shooter Max\",
\"TeamName\": \"The One\",
\"TeamMembers\" : \"4\"
}
]
Run Code Online (Sandbox Code Playgroud)
但是,当代码命中下一行时:
var result = JsonConvert.DeserializeObject<T>(json); // In this case, <T> is <Game>
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
JsonSerializationException:无法将当前JSON数组(例如[1,2,3])反序列化为类型'GameLabs.Game',因为该类型需要JSON对象(例如{"name":"value"})才能正确反序列化.
GameLabs.Game是一个看起来像这样的类:
public sealed class Game
{
public string CreatorId { get; set; }
public string GameId { get; …Run Code Online (Sandbox Code Playgroud) 我的数据库中有一个视图.我创建了视图模型并调用它EF Core.视图中有16行.当我调用它Take(10)并使用EF Core它返回10行但我看DBSet所有行显示在那里.详细信息请参阅我的代码
[Table("my_view", Schema ="dbo")]
public class MyView
{
[Column("id")]
[Key]
public int Id { get; set; }
[Column("name")]
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的行动中:
public JsonResult Index()
{
using (var context = new CCContext())
{
var listOfData = context.MyView
.AsQueryable().Take(10).ToList();
return Json(listOfData);
}
}
Run Code Online (Sandbox Code Playgroud)
PS.对于某些问题,我无法上传结果屏幕.(https://m.imgur.com/gallery/xmP3q32)
我正在从我的浏览器上传一张 jpg 图像,作为表单的一部分,到我位于 AWS Lambda 上的 .Net Core web api。它上传但在我尝试使用 ImageSharp 处理它时导致错误。我还注意到上传版本的文件大小几乎是原始文件大小的两倍。请注意,在从 Visual Studio 2019 预览版运行的 Windows 环境中本地上传时没有问题。这是从 Visual Studio 发布到 AWS Lambda 的版本出现问题。
更多信息:图像作为 IForm 中的 IFormFile 进入我的 .NET 控制器。
是否有任何API可以从C#调用实体框架迁移?
dotnet ef add migrations Initial我没有使用,而是向用户提供了安装系统的界面。
用户应选择数据库属性,并且系统应能够从所有不同的程序集中创建迁移并为用户创建数据库。
我没有为此找到任何文档。
c# entity-framework entity-framework-core .net-core asp.net-core
.net-core ×10
c# ×8
.net ×2
asp.net-core ×2
asp.net ×1
aws-lambda ×1
conditional ×1
delegates ×1
imagesharp ×1
json ×1
json.net ×1
lambda ×1
linq ×1
performance ×1
ziparchive ×1