C# 将二进制文件写入.Xlsx

C# 将二进制文件写入.Xlsx,c#,lambda,C#,Lambda,您好,我有下面这个类,我正在使用它从SQLServer下载Excel文件,在WPF中使用Linq to sql。我很难让这个方法发挥作用 public class Tables { public Guid Id { get; set; } public byte[] Data { get; set; } public string Notes{ get; set; }

您好,我有下面这个类,我正在使用它从SQLServer下载Excel文件,在WPF中使用Linq to sql。我很难让这个方法发挥作用

public class Tables
            {
                public Guid Id { get; set; }
                public byte[] Data { get; set; }
                public string Notes{ get; set; }            
            }
财产

public ObservableCollection<Tables> Table
        {
            get
            {
                return mTables;
            }
        }

您收到错误是因为
fileBytes
仅存在于传递给ForEach的委托中。试试这个:

private void executeSaveAttachment(object parameter)
{
    using (var dlg = new SaveFileDialog())
    {
        foreach (var table in Table)
        {
            if (dlg.ShowDialog() ?? false)
            {
                File.WriteAllBytes(dlg.FileName, table.Data)
            }
        }
    }
}
用于WPF

private void executeSaveAttachment(object parameter)
        {
            SaveFileDialog dlg = new SaveFileDialog();
            {
                foreach (var table in Table)
                {
                    if (dlg.ShowDialog() ?? false)
                    {
                        File.WriteAllBytes(dlg.FileName, table.Data);
                    }
                }
            }
        }  

您的
fileBytes
数组是在循环中初始化的,因此它在下面的
if
语句的上下文中不可用。“Microsoft.Win32.SaveFileDialog”:using语句中使用的类型必须隐式转换为“System.IDisposable”。在.NET framework中有3个SaveFileDialog类:一个用于WinForms(System.Windows.Forms.SaveFileDialog),一个用于WPF(System.Windows.Controls.SaveFileDialog),另一个用于Microsoft.Win32命名空间(不确定最后一个用于什么)。如果您使用的是WinForms,请使用第一个,它是一次性的,因此请使用using关键字。如果您使用的是其他任何一个,它们都不是一次性的,您可以删除using关键字。
private void executeSaveAttachment(object parameter)
        {
            SaveFileDialog dlg = new SaveFileDialog();
            {
                foreach (var table in Table)
                {
                    if (dlg.ShowDialog() ?? false)
                    {
                        File.WriteAllBytes(dlg.FileName, table.Data);
                    }
                }
            }
        }