2011-05-24 41 views
1

首先,我将描述我的表格结构。有两个表,FormField和Field。如何在Linq中解决这个不同的问题?

一个字段可以链接到多个表单域,但一个表单域只能包含一个字段。

所以我有这样的LINQ查询:

var fields = from f in Data.Field.All() 
        join ff in formfields on f.Field_rid equals ff.Field_rid 
        select new 
        { 
         FormField = ff, 
         Field = f 
        }; 

现在,我需要把一个不同的地方在那里,但我想不通的地方。基本上,我不希望相同的领域不止一次返回给我(所以我从来没有得到一个重复的领域)。我将在哪里使用独特的功能?

回答

1

Distinct似乎没有帮助你,如果你有多个formFieldsfield并且只想接收不同的fields。但是,如果你能想到一些方法只有一个formField所有领域的formFields选择那么就可以轻松完成:

// assumimg that for all fields we want to receive only formField with minimum Field_rid 
var fields = Data.Field.All() 
       .Select(f => new 
        { 
         Field = f, 
         FormField = formFields 
             .Where(ff => ff.Field_rid == f.Field_rid) 
             .OrderBy(ff => ff.Field_rid) 
             .FirstOrDefault(), 
        }); 
+0

那就是我一直在寻找的解决方案。 FirstOrDefault没有问题,因为理论上每个领域都不应该超过一个领域。 – Earlz 2011-05-24 21:01:04

+0

如果是这样,那么你可以用'Single()'替换'FirstOrDefault()'来检验你的理论是否仍然相关。 – Snowbear 2011-05-24 21:11:36