1

我想这是一个非常标准的任务,但我仍然无法习惯 LINQ。我需要数据库中表中的两行,现在我使用两个单独的 LINQ 查询:

        imageInfo = AppConfigService.All().Where(a =>(a.ConfigProperty == "MaterialImages")).FirstOrDefault();
        imageLocation = AppConfigService.All().Where(c => (c.ConfigProperty == "DefaultImagePath")).FirstOrDefault();

我想要的是将信息保存在一个变量中,例如imageInfo[0]for myMaterialImagesimageInfo[1]for myDefaultImagePath或类似的东西。尽管我对 LINQ 的了解非常少,但我认为这两个查询是不需要的。

4

4 回答 4

4

您可以使用ConcatTake(1)

var imageInfoLocation =
    (from a in AppConfigService
     where a.ConfigProperty == "MaterialImages"
     select cust).Take(1)
    .Concat(
    (from a in AppConfigService
     where a.ConfigProperty == "DefaultImagePath"
     select cust).Take(1))
;
于 2013-03-07T13:25:06.917 回答
3

您可以在下面使用单个查询,但您的原始查询更具可读性:

var res = AppConfigService
    .All()
    .Where(a =>(a.ConfigProperty == "MaterialImages" || a.ConfigProperty == "DefaultImagePath"))
    .GroupBy(a => a.ConfigProperty)
    .ToDictionary(g => g.Key, g => g.FirstOrDefault());

这将带回一个不超过两个项目的字典:一个用于ConfigProperty,另一个用于具有该属性的第一个或默认项目。如果没有带有"MaterialImages"or的源行"DefaultImagePath",则结果将包含少于两个项目。您可以通过使用相应的常量作为键查找来从字典中获取值。

于 2013-03-07T13:25:17.233 回答
1

我认为不可能在一个查询中进行,因为您希望列表中的第一个元素满足两个不同的条件,如果您想在一个集合中获得结果,可以使用联合

var union = imageInfo = AppConfigService.All().
   Where(a =>(a.ConfigProperty == "MaterialImages")).FirstOrDefault().
  Union(
           AppConfigService.All().Where(c => (c.ConfigProperty ==
                                        "DefaultImagePath")).FirstOrDefault());
于 2013-03-07T13:27:01.287 回答
-1

You can use the following,

 var rows = AppConfigService.All().Where(a =>(a.ConfigProperty == "MaterialImages" || c.ConfigProperty == "DefaultImagePath"));
于 2013-03-07T13:20:56.460 回答