小编Bum*_*per的帖子

使用LINQ的"选择"部分中的表达式来实体查询

我希望能够重用我的LINQ to Entities查询的"选择"部分.例如,我可以采取以下措施......

projectQuery.Select(p => new ProjectModel
    ProjectName = p.ProjectName,
    ProjectNumber = p.ProjectNumber);
Run Code Online (Sandbox Code Playgroud)

并用表达式替换它......

projectQuery.Select(ProjectModel.FullSelector);
Run Code Online (Sandbox Code Playgroud)

其中FullSelector看起来像这样:

public static System.Linq.Expressions.Expression<Func<Project, ProjectModel>> FullSelector = project => new ProjectModel
{
    ProjectName = p.ProjectName,
    ProjectNumber = p.ProjectNumber
};
Run Code Online (Sandbox Code Playgroud)

这很好用,发送到数据库的查询只选择FullSelector使用的字段.另外,每次我需要查询Project实体时,我都可以重用FullSelector.

现在是棘手的部分.在执行包含导航属性的查询时,嵌套的选择器表达式不起作用.

public static System.Linq.Expressions.Expression<Func<Project, ProjectModel>> FullSelector = project => new ProjectModel
{
    ProjectName = p.ProjectName,
    ProjectNumber = p.ProjectNumber
    Addresses = p.Addresses.Select(AddressModel.FullSelector);
};
Run Code Online (Sandbox Code Playgroud)

这不起作用.内部Select给出了编译时错误"无法根据用法推断出类型参数.请尝试明确指定类型参数."

以下示例编译但在执行查询时说"内部.NET Framework数据提供程序错误1025"时崩溃.

public static System.Linq.Expressions.Expression<Func<Project, ProjectModel>> FullSelector = project => new ProjectModel
{
    ProjectName = p.ProjectName,
    ProjectNumber = p.ProjectNumber
    Addresses = p.Addresses.Select(AddressModel.FullSelector.Compile()); …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-entities

9
推荐指数
1
解决办法
2563
查看次数

返回FileStream后无法删除临时文件

我在C#MVC应用程序中有一个函数,它创建一个临时目录和一个临时文件,然后使用FileStream打开文件,将FileStream返回给调用函数,然后需要删除临时文件.但是,我不知道如何删除临时目录和文件,因为它总是错误地说"进程无法访问该文件,因为它正被另一个进程使用".这是我尝试过的,但FileStream仍在使用finally块中的临时文件.如何返回FileStream并删除临时文件?

public FileStream DownloadProjectsZipFileStream()
{
    Directory.CreateDirectory(_tempDirectory);
    // temporary file is created here
    _zipFile.Save(_tempDirectory + _tempFileName);

    try
    {
        FileStream stream = new FileStream(_tempDirectory + _tempFileName, FileMode.Open);
        return stream;
    }
    finally
    {
        File.Delete(_tempDirectory + _tempFileName);
        Directory.Delete(_tempDirectory);
    }
}
Run Code Online (Sandbox Code Playgroud)

FileStream返回的函数如下所示:

public ActionResult DownloadProjects ()
{
    ProjectDownloader projectDownloader = new ProjectDownloader();

    FileStream stream = projectDownloader.DownloadProjectsZipFileStream();
    return File(stream, "application/zip", "Projects.zip");
}
Run Code Online (Sandbox Code Playgroud)

更新:我忘了提到zip文件是380 MB.使用MemoryStream时,我遇到了系统内存不足的问题.

c# asp.net-mvc file-io filestream temporary-files

6
推荐指数
3
解决办法
4948
查看次数

C#将不同类型的xml数组反序列化为多个数组

我有以下xml:

<Applications>
    <AccessibleApplication></AccessibleApplication>
    <AccessibleApplication></AccessibleApplication>
    <EligibleApplication></EligibleApplication>
    <EligibleApplication></EligibleApplication>
</Applications>
Run Code Online (Sandbox Code Playgroud)

有没有办法将其反序列化为 C# 对象,以便 AccessibleApplications 和 EligibleApplications 是两个单独的数组?我尝试了以下但得到一个例外,因为“应用程序”被使用了不止一次。

[XmlArray("Applications")]
[XmlArrayItem("AccessibleApplication")]
public List<Application> AccessibleApplications { get; set; }

[XmlArray("Applications")]
[XmlArrayItem("EligibleApplication")]
public List<Application> EligibleApplications { get; set; }
Run Code Online (Sandbox Code Playgroud)

例外情况是:来自命名空间 '' 的 XML 元素 'Applications' 已经存在于当前作用域中。使用 XML 属性为元素指定另一个 XML 名称或命名空间。

这是可能的吗?

谢谢!

编辑:我忘了提到我不想仅仅为了为两个数组提供容器对象而拥有一个“应用程序”类。我有几种这样的情况,我不希望这些类的混乱,它们的唯一目的是拆分两个相同类型的数组。

我希望能够使用诸如 [XmlArrayItem="Application/AccessibleApplication"] 之类的某种标记将两个数组反序列化为外部对象,而无需创建“应用程序”类。

c# xml xml-serialization xml-deserialization xmlserializer

5
推荐指数
1
解决办法
1672
查看次数

Android findViewById在主Activity以外的类中使用时返回null

我试图在我的侦听器类中通过ID获取TextView,它处理一个微调器的onItemSelected事件.在我的主Activity中,我可以调用findViewById(R.id.textView1),它工作正常.但是如果我在我的spinner监听器类中调用相同的函数,它总是返回null并强制关闭应用程序.

任何人都知道为什么findViewById在我的主Activity中工作但在我的监听器类中不起作用?

这是我主要活动的代码.单击按钮时调用它:

public void something ()
{
    setContentView(R.layout.spinnerLayout);

    Spinner spinner = (Spinner) findViewById(R.id.mySpinner);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.spinner_array, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

}
Run Code Online (Sandbox Code Playgroud)

这是MyOnItemSelectedListener的代码:

public class MyOnItemSelectedListener implements OnItemSelectedListener 
{

    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
    {               
        TextView tv = view.findViewById(R.id.myTextView);
        // I want to set the text of this text view to the value selected using the spinner
        tv.setText("Something");
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能获得"TextView tv …

android

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

SQL在select子查询中只返回一行或null

在Oracle中,是否可以在select语句中有一个子查询,如果子查询返回一行,则返回一个列,如果子查询没有返回多行,则返回null?

例:

SELECT X,
  Y,
  Z,
  (SELECT W FROM TABLE2 WHERE X = TABLE1.X) /* but return null if 0 or more than 1 rows is returned */
FROM TABLE1;
Run Code Online (Sandbox Code Playgroud)

谢谢!

sql oracle subquery

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