从Database表中选择两行

时间:2013-03-07 13:18:59

标签: c# linq

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

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

我想要的是将信息保存在一个变量中,例如我imageInfo[0]的{​​{1}}和MaterialImages的{​​{1}}或类似的东西。尽管我对LINQ知之甚少,但我认为不需要这两个查询。

4 个答案:

答案 0 :(得分: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))
;

答案 1 :(得分: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""DefaultImagePath"的源行,则结果将包含少于两个项目。您可以通过使用相应的常量作为键来查找字典中的值。

答案 2 :(得分:1)

我认为不可能在一个查询中做,因为你想要第一个元素形成满足两个不同条件的列表,如果你想在一个集合中获得结果,你可以使用union

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

答案 3 :(得分:-1)

您可以使用以下内容

 var rows = AppConfigService.All().Where(a =>(a.ConfigProperty == "MaterialImages" || c.ConfigProperty == "DefaultImagePath"));
相关问题